这个问题在这里已有答案:
美好的一天,
所以我一直试图解决这个问题几天了。问题是我正在使用片段和recyclerview + cardview +适配器。
我试图将Context从我的适配器传递给我的片段。我的Adapter类中有一个onClickMethod(),它从片段中启动一个新活动并显示一堆数据。
我得到的错误是:错误:不兼容的类型:AuthorsFragment无法转换为Context。
我知道问题是什么,我知道一个活动本身就是一个上下文。但是,片段不是。这很难。
适配器代码:
public class exampleAuthorsAdapter extends RecyclerView.Adapter<exampleAuthorsAdapter.MyViewHolder> {
public Context mContext;
private ArrayList<exampleItemAuthors> mExampleListAuthors;
public static class MyViewHolder extends RecyclerView.ViewHolder {
TextView authorTitle;
ImageView authorThumbnail;
CardView cardview;
public MyViewHolder(View itemView) {
super(itemView);
authorTitle = itemView.findViewById(R.id.authorCardViewTitle);
authorThumbnail = itemView.findViewById(R.id.authorCardViewImage);
cardview = itemView.findViewById(R.id.cardViewMainAuthors);
}
}
public exampleAuthorsAdapter(Context mContext, ArrayList<exampleItemAuthors> exampleItemAuthors) {
mExampleListAuthors = exampleItemAuthors;
this.mContext = mContext;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view;
LayoutInflater mInflater = LayoutInflater.from(mContext);
view = mInflater.inflate(R.layout.example_item_authors, parent, false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, final int position) {
exampleItemAuthors currentItem = mExampleListAuthors.get(position);
final Context mContext = holder.itemView.getContext();
holder.authorTitle.setText(currentItem.getAuthorTitle());
holder.authorThumbnail.setImageResource(currentItem.getAuthorThumbnail());
holder.cardview.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(mContext, activityAuthorsView.class);
intent.putExtra("Title", mExampleListAuthors.get(position).getAuthorTitle());
intent.putExtra("Description", mExampleListAuthors.get(position).getAthorDescription());
intent.putExtra("Thumbnail", mExampleListAuthors.get(position).getAuthorThumbnail());
mContext.startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return mExampleListAuthors.size();
}
}
片段代码:
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_authors, container, false);
mLayoutManagerAuthor = new GridLayoutManager(getActivity(), 2);
return view;
}
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
ArrayList<exampleItemAuthors> listAuthors = new ArrayList<>();
listAuthors.add(new exampleItemAuthors("Niccolo Machiavelli", "The life
of a great human being.", R.drawable.machiavelli));
mRecyclerViewAuthor = view.findViewById(R.id.recyclerViewAuthor);
mRecyclerViewAuthor.setHasFixedSize(true);
mAdapterAuthor = new exampleAuthorsAdapter(this, getActivity());
mRecyclerViewAuthor.setLayoutManager(mLayoutManagerAuthor);
mRecyclerViewAuthor.setAdapter(mAdapterAuthor);
任何和所有的帮助都会很棒!!!我在苦苦挣扎:(((((((
这是你的适配器构造函数:
public exampleAuthorsAdapter(Context mContext, ArrayList<exampleItemAuthors> exampleItemAuthors) {
this.mExampleListAuthors = exampleItemAuthors;
this.mContext = mContext;
}
在这里,您可以在片段中创建一个新的适配器:
mAdapterAuthor = new exampleAuthorsAdapter(this, getActivity()); //won't work
我们看到你的第一个参数必须是上下文(getActivity)而第二个参数是数据(ArrayList listAuthors),所以更改适配器初始化raw如下:
mAdapterAuthor = new exampleAuthorsAdapter(getActivity(), listAuthors);
请享用!