如何在不使用 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 内膨胀。
- 在 Fragment 中,您可以使用 Activity 的上下文或整个应用程序的上下文。
- 此外,您还错过了在 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()
当我尝试在我的 片段 中使用上下文时,出现错误:
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 内膨胀。
- 在 Fragment 中,您可以使用 Activity 的上下文或整个应用程序的上下文。
- 此外,您还错过了在 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()