有点卡住了。我尝试将 getActivity 更改为“c”(上下文),但随后 getSupportFragmentManager 出现相同的错误。阅读有关此的不同主题,但找不到解决方案。检查库并尝试更改它们但没有任何改变。非常感谢您的帮助!
import android.app.Activity;
import android.content.Context;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.Fragment;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.example.mrti.menu.Fragments.MealsListFragment;
import com.example.mrti.menu.R;
import java.util.ArrayList;
public class CategoryAdapter extends RecyclerView.Adapter<ViewHolder> {
Context c;
ArrayList<Category> Categories;
public CategoryAdapter(Context c, ArrayList<Category> Categories) {
this.c = c;
this.Categories = Categories;
}
// INITIALIZE HOLDER
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.rec_item, null);
ViewHolder holder = new ViewHolder(v);
return holder;
}
@Override
public void onBindViewHolder(ViewHolder holder, final int position) {
// BIND DATA TO VIEWS
holder.mNameTextView.setText(Categories.get(position).getName());
// LOAD IMAGES FROM WEB AND CACHE THEM
Glide.with(c)
.load(Categories.get(position).getImage())
.diskCacheStrategy(DiskCacheStrategy.ALL) // Saves the media item after all transformations to cache and
// Saves just the original data to cache.
.placeholder(R.mipmap.ic_launcher)
.into(holder.img);
// LISTENER
holder.setItemClickListener(new itemClickListener() {
@Override
public void onItemClick(View v, int pos) {
Toast.makeText(c, Categories.get(pos).getName(), Toast.LENGTH_SHORT ).show();
MealsListFragment fragment = new MealsListFragment();
FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.root_layout, fragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
});
}
最佳答案
Cannot resolve getActivity() in fragment
您的 Java 类声明如下:
public class CategoryAdapter extends RecyclerView.Adapter<ViewHolder>
CategoryAdapter
不是 fragment 。 CategoryAdapter
是一个 RecyclerView.Adapter
。
RecyclerView.Adapter
没有 getActivity()
方法。因此,您的代码将无法编译。
您似乎想在 RecyclerView.Adapter
中执行一个 FragmentTransaction
。但是,为了能够调用 getSupportFragmentManager()
,您需要托管 RecyclerView
的 FragmentActivity
,您的 CategoryAdapter附上
。
但是,RecyclerView.Adapter
无法直接或间接访问该 FragmentActivity
。因此,您需要将 FragmentActivity
放入 CategoryAdapter
中。
您当前的构造函数声明为:
public CategoryAdapter(Context c, ArrayList<Category> Categories)
我的猜测是,在您的 Activity 中,您正在调用 new CategoryAdapter(this, someListOfcategories)
。如果是这样,请将您的构造函数更改为:
public CategoryAdapter(FragmentActivity c, ArrayList<Category> Categories)
并将您的字段更改为 FragmentActivity
。然后,您可以更改:
FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
到:
FragmentManager fragmentManager = c.getSupportFragmentManager();
关于android - 无法解析 recyclerView.adapter 中的 getActivity(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40775504/