Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何将上下文从适配器传递到片段?(安卓)_Android_Android Fragments_Adapter_Android Recyclerview - Fatal编程技术网

Android 如何将上下文从适配器传递到片段?(安卓)

Android 如何将上下文从适配器传递到片段?(安卓),android,android-fragments,adapter,android-recyclerview,Android,Android Fragments,Adapter,Android Recyclerview,大家好 所以我已经尝试解决这个问题好几天了。 问题是我使用的是片段和recyclerview+cardview+适配器 我试图将上下文从适配器传递到片段。我的适配器类中有一个onClickMethod(),它从片段启动一个新活动并显示一组数据 我得到的错误是:错误:不兼容的类型:AuthorsFragment无法转换为上下文 我知道问题是什么,我知道一项活动本身就是一种环境。但是,一个片段不是。这就很难了 适配器代码: public class exampleAuthorsAdapter ext

大家好

所以我已经尝试解决这个问题好几天了。 问题是我使用的是片段和recyclerview+cardview+适配器

我试图将上下文从适配器传递到片段。我的适配器类中有一个onClickMethod(),它从片段启动一个新活动并显示一组数据

我得到的错误是:错误:不兼容的类型:AuthorsFragment无法转换为上下文

我知道问题是什么,我知道一项活动本身就是一种环境。但是,一个片段不是。这就很难了

适配器代码:

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();

}
公共类exampleAuthorsAdapter扩展了RecyclerView.Adapter{
公共语境;
私人ArrayList mExampleListAuthors;
公共静态类MyViewHolder扩展了RecyclerView.ViewHolder{
文本视图作者;
ImageView authorThumbnail;
卡德维尤;
公共MyViewHolder(查看项目视图){
超级(项目视图);
authorTitle=itemView.findviewbyd(R.id.authorCardViewTitle);
authorThumbnail=itemView.findviewbyd(R.id.authorCardViewImage);
cardview=itemView.findViewById(R.id.cardViewMainAuthors);
}
}
公共exampleAuthorsAdapter(上下文mContext、ArrayList ExampleAuthors){
mExampleListAuthors=exampleItemAuthors;
this.mContext=mContext;
}
@非空
@凌驾
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup父级,int-viewType){
视图;
LayoutInflater mInflater=LayoutInflater.from(mContext);
视图=mInflater.flate(R.layout.example\u item\u作者,父项,false);
返回新的MyViewHolder(视图);
}
@凌驾
public void onBindViewHolder(@NonNull MyViewHolder holder,final int位置){
exampleItemAuthors currentItem=mExampleListAuthors.get(位置);
final Context mContext=holder.itemView.getContext();
holder.authorTitle.setText(currentItem.getAuthorTitle());
holder.authorThumbnail.setImageResource(currentItem.getAuthorThumbnail());
holder.cardview.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
意向意向=新意向(mContext,activityAuthorsView.class);
intent.putExtra(“Title”,mExampleListAuthors.get(position.getAuthorTitle());
intent.putExtra(“Description”,mExampleListAuthors.get(position.getAthorDescription());
intent.putExtra(“缩略图”,mExampleListAuthors.get(position.getAuthorThumbnail());
mContext.startActivity(意图);
}
});
}
@凌驾
public int getItemCount(){
返回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 View onCreateView(@NonNull LayoutInflater充气机、@Nullable ViewGroup容器、@Nullable Bundle savedInstanceState){
视图=充气机。充气(R.layout.fragment\u作者,容器,false);
mlayoutmanagerautor=新的GridLayoutManager(getActivity(),2);
返回视图;
}
已创建公用void onview(@NonNull视图,@Nullable Bundle savedInstanceState){
super.onViewCreated(视图,savedInstanceState);
ArrayList listAuthors=新建ArrayList();
添加(新的例子)作者(“尼科洛·马基雅维利”,“生活
一个伟大的人。”,R.drawable.machiavelli);
mRecyclerViewAuthor=view.findviewbyd(R.id.recyclerViewAuthor);
mrecyclServiceAuthor.setHasFixedSize(true);
madapterauther=newexampleauthorsadapter(this,getActivity());
MrecyclServiceAuthor.setLayoutManager(MlayoutManagerautor);
设置适配器(mAdapterAuthor);

任何和所有的帮助都将是惊人的!!!我正在努力:((((((

这是您的适配器构造函数):

public exampleAuthorsAdapter(Context mContext, ArrayList<exampleItemAuthors> exampleItemAuthors) {

this.mExampleListAuthors = exampleItemAuthors;
this.mContext = mContext;

}
正如我们所看到的,第一个参数必须是上下文(getActivity),第二个参数是数据(ArrayList listAuthors),因此将适配器初始化更改为raw,如下所示:

 mAdapterAuthor = new exampleAuthorsAdapter(getActivity(), listAuthors);

享受!

你可以将
上下文
传递给适配器的构造函数(
ExampleAuthorAdapter
)我该怎么做?我不知道把代码放在哪里或放在什么代码中:(((请添加
ExampleAuthorAdapter
类的代码(哪个名称应该以大写字母开头!)我想你应该养成习惯,在类名的第一个字母中使用大写:)。我应该放什么代码?你能给我看一下吗?我尝试过这个方法,但它以前不起作用。现在它起作用了,因为我的适配器类中有一个构造函数。但是新的活动不显示要从onClickMethod()传递的数据…我遗漏了什么吗?我被编辑了这个答案,但他拒绝了。将此行“mExampleListAuthors=exampleItemAuthors;”更新为“this.mExampleListAuthors=exampleItemAuthors;”如果不这样做,mExampleListAuthors将不会通过构造函数设置,我遗漏了这一点)
 mAdapterAuthor = new exampleAuthorsAdapter(getActivity(), listAuthors);