如何在不使用 Fragment 中的上下文的情况下在 Adapter 中使用 Picasso

How to use Picasso in an Adapter without using context in Fragment

当我尝试在我的 片段 中使用上下文时,出现错误:

constructor Adapter in class Adapter cannot be applied to given types; required:Context,List<ListItem>,OnItemClickListener

我已经在我的适配器中声明了我的上下文如下:

 private Context mContext;

然后我初始化了上下文:

 public MyAdapter(Context context,List<ListItem> listItems, OnItemClickListener callback) {
    this.listItems = listItems;
    this.callback = callback;
    this.mContext = context;

}

并使用 mContext 使用 picasso

在 onBindViewHolder 中获取我的图像 url
 @Override
        public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
            ListItem listItem = listItems.get(position);

     Picasso.with(mContext).load(listItem.getImageurl()).into(holder.imageUrl;

        }

但现在我似乎无法在我的片段中使用这个上下文。

这是我尝试过的:在我的片段中:

//发生错误

 adapter = new MyAdapter(this,listItems);

所以我试了这个:

//还是报错

  adapter = new MyAdapter(getContext(),this);

我也尝试了 getActivity 但仍然报错

adapter = new MyAdapter(getActivity());

我哪里错了? 我真正想做的就是在我的 listfragment 中显示图像,但我不知道如何使用 Picasso 和 using context,而 MyAdapter 不需要 context 才能正常运行。我一直在使用它而没有声明上下文并且数据显示正确。 Onclick 也在工作并显示来自 firebase 的字符串,但现在我需要使用 Picasso 将来自 Firebase 的图像显示到我的列表片段中。除了我的片段中的这行代码外,其他一切正常:

adapter = new MyAdapter(getActivity());

碎片在 Activity 内膨胀。

  1. 在 Fragment 中,您可以使用 Activity 的上下文或整个应用程序的上下文。
  2. 此外,您还错过了在 Adapter 中传递一个参数,即您的点击侦听器。

像这样定义适配器 -

OnItemClickListener mOnItemClickListener = OnItemClickListener {
    void onItemClick(int position) {

    }
}

adapter = new MyAdapter(getActivity(), listItems, mOnItemClickListener);

adapter = new MyAdapter(getActivity().getApplicationContext(), listItems, mOnItemClickListener);

在您的适配器初始化中,您传递了 2 个参数,但您的构造函数需要 3 个参数。

所以尝试使用 3 个参数进行初始化:

   adapter=new MyAdapter(getContext(), listItems, this);

getContext()=片段上下文。

lisItems= 您的列表。

this=是您的点击界面侦听器(确保您在片段中实现了侦听器)。

试试这个,我想你忘了最后一个参数

OnItemClickListener listener = OnItemClickListener {
    void onItemClick(int position) {
        //some code
    }
}
adapter = new MyAdapter(this, listItems, listener);

您尝试从 Holder 中的任何视图对象获取上下文。 示例:

mContext = holder.imageView.getContext()