卡住了一点点.我尝试将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不是片段. CategoryAdapter是RecyclerView.Adapter.
RecyclerView.Adapter
没有getActivity()方法.因此,您的代码将无法编译.
您似乎想要在RecyclerView.Adapter中执行FragmentTransaction.但是,为了能够调用getSupportFragmentManager(),您需要托管与CategoryAdapter相连的RecyclerView的FragmentActivity.
但是,RecyclerView.Adapter没有对FragmentActivity的直接或间接访问权限.因此,您需要将FragmentActivity放入CategoryAdapter.
您当前的构造函数声明为:
public CategoryAdapter(Context c,ArrayList<Category> Categories)
我的猜测是,在你的活动中,你正在调用新的CategoryAdapter(this,somelistofcategories).如果是这样,请将构造函数更改为:
public CategoryAdapter(FragmentActivity c,ArrayList<Category> Categories)
并将您的字段更改为FragmentActivity.然后,您可以更改:
FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
至:
FragmentManager fragmentManager = c.getSupportFragmentManager();