如何将上下文传递给毕加索
How to pass context to Picasso
你好,我正在尝试使用 Picasso 添加图像,但是当我使用以下视图持有者时,在适配器中获取 Picasso 的上下文时遇到问题:
这是我的适配器
public class DataAdapter extends
RecyclerView.Adapter<DataAdapter.ViewHolder> {
private ArrayList<String>
al_prod_name,al_prod_price,al_prod_id,
al_prod_image;
public DataAdapter(ArrayList<String> al_prod_id,
ArrayList<String> al_prod_name,
ArrayList<String> al_prod_price,
ArrayList<String> al_prod_image) {
this.al_prod_id = al_prod_id;
this.al_prod_price = al_prod_price;
this.al_prod_name = al_prod_name;
this.al_prod_image = al_prod_image
}
public DataAdapter.ViewHolder
onCreateViewHolder(ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.cardrow, viewGroup,
false);
return new ViewHolder(view);
}
public void onBindViewHolder(DataAdapter.ViewHolder
viewHolder, int i) {
viewHolder.tv_prod_name.setText
(al_prod_name.get(i));
viewHolder.tv_prod_price.setText
(al_prod_price.get(i));
Picasso.with().load(al_prod_image.get(i))
.placeholder(R.drawable.floatingicon)
.error(R.drawable.floatingicon).
.into(viewHolder.img_prod);
}
public int getItemCount() {
return al_prod_id.size();
}
public class ViewHolder extends RecyclerView.ViewHolder{
private TextView tv_prod_name,tv_prod_price;
private ImageView img_prod;
public ViewHolder(View view) {
super(view);
tv_prod_name = (TextView)view
.findViewById(R.id.tv_prod_name);
tv_prod_price = (TextView)view
.findViewById(R.id.tv_prod_price);
img_prod = (ImageView)view
.findViewById(R.id.img_prod);
}
}
}
请帮助获取 context.This 我是如何设置适配器的:
RecyclerView.Adapter adapter = new
DataAdapter(al_prod_id,al_prod_name,
al_prod_price,al_prod_image);
在您的适配器 Context 上下文中声明一个数据成员;
像这样为您的适配器编写构造函数,
DataAdapter(Context context, otherAurguments);
并且在创建适配器时
DataAdapter adapter = new DataAdapter(yourActivityName.this , otherAurguments);
将您的构造函数更改为
private Context context;
public DataAdapter(Context context, ArrayList<String> al_prod_id,
ArrayList<String> al_prod_name,
ArrayList<String> al_prod_price,
ArrayList<String> al_prod_image) {
this.context = context;
this.al_prod_id = al_prod_id;
this.al_prod_price = al_prod_price;
this.al_prod_name = al_prod_name;
this.al_prod_image = al_prod_image
}
现在将您的适配器命名为
RecyclerView.Adapter adapter = new
DataAdapter(context, al_prod_id,al_prod_name,
al_prod_price,al_prod_image);
此处的上下文是您的 activity 参考。希望对你有帮助。
每个视图都有一个上下文。我建议您使用 getApplicationContext()
来防止应用程序在 activity 上下文变为 null
时崩溃
Picasso.with(itemView.getContext()).load(al_prod_image.get(i))
或
Picasso.with(itemView.getContext().getApplicationContext()).load(al_prod_image.get(i))
最简单的解决方案是使用 viewHolder.itemView.getContext()
Picasso.with(viewHolder.itemView.getContext()).load(al_prod_image.get(i))
.placeholder(R.drawable.floatingicon)
.error(R.drawable.floatingicon).
.into(viewHolder.img_prod);
来自 Activity,
RecyclerView.Adapter adapter = new DataAdapter(YOUR_ACTIVITY.this, al_prod_id,al_prod_name, al_prod_price,al_prod_image);
在适配器中,
private Context context;
public DataAdapter(Context mContext, ArrayList<String> al_prod_id, ArrayList<String> al_prod_name, ArrayList<String> al_prod_price, ArrayList<String> al_prod_image) {
this.context= mContext;
this.al_prod_id = al_prod_id;
this.al_prod_price = al_prod_price;
this.al_prod_name = al_prod_name;
this.al_prod_image = al_prod_image
}
在 Picasso 的上下文中使用它
Picasso.with(context).load(al_prod_image.get(i))
.placeholder(R.drawable.floatingicon)
.error(R.drawable.floatingicon).
.into(viewHolder.img_prod);
将您的 activity 上下文传递给 DataAdapter
RecyclerView.Adapter adapter = new DataAdapter(yourActivity.this,al_prod_id,al_prod_name,
al_prod_price,al_prod_image);
数据适配器
private Context mContext;
private ArrayList<String> al_prod_name,al_prod_price,al_prod_id,al_prod_image;
public DataAdapter(Context mContext,ArrayList<String> al_prod_id, ArrayList<String> al_prod_name,ArrayList<String> al_prod_price, ArrayList<String> al_prod_image)
{
this.mContext=mContext;
this.al_prod_id = al_prod_id;
this.al_prod_price = al_prod_price;
this.al_prod_name = al_prod_name;
this.al_prod_image = al_prod_image
}
//set image
Picasso.with(mContext).load(al_prod_image.get(i))
.placeholder(R.drawable.floatingicon)
.error(R.drawable.floatingicon).
.into(viewHolder.img_prod);
像这样更改您的 DataAdapter 构造函数在您的适配器中创建一个 Context 对象 class 并像这样更改您的构造函数
public DataAdapter(Context context,ArrayList<String> al_prod_id,
ArrayList<String> al_prod_name,
ArrayList<String> al_prod_price,
ArrayList<String> al_prod_image) {
this.al_prod_id = al_prod_id;
this.al_prod_price = al_prod_price;
this.al_prod_name = al_prod_name;
this.al_prod_image = al_prod_image;
this.mContext = context;
}
你好,我正在尝试使用 Picasso 添加图像,但是当我使用以下视图持有者时,在适配器中获取 Picasso 的上下文时遇到问题:
这是我的适配器
public class DataAdapter extends
RecyclerView.Adapter<DataAdapter.ViewHolder> {
private ArrayList<String>
al_prod_name,al_prod_price,al_prod_id,
al_prod_image;
public DataAdapter(ArrayList<String> al_prod_id,
ArrayList<String> al_prod_name,
ArrayList<String> al_prod_price,
ArrayList<String> al_prod_image) {
this.al_prod_id = al_prod_id;
this.al_prod_price = al_prod_price;
this.al_prod_name = al_prod_name;
this.al_prod_image = al_prod_image
}
public DataAdapter.ViewHolder
onCreateViewHolder(ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.cardrow, viewGroup,
false);
return new ViewHolder(view);
}
public void onBindViewHolder(DataAdapter.ViewHolder
viewHolder, int i) {
viewHolder.tv_prod_name.setText
(al_prod_name.get(i));
viewHolder.tv_prod_price.setText
(al_prod_price.get(i));
Picasso.with().load(al_prod_image.get(i))
.placeholder(R.drawable.floatingicon)
.error(R.drawable.floatingicon).
.into(viewHolder.img_prod);
}
public int getItemCount() {
return al_prod_id.size();
}
public class ViewHolder extends RecyclerView.ViewHolder{
private TextView tv_prod_name,tv_prod_price;
private ImageView img_prod;
public ViewHolder(View view) {
super(view);
tv_prod_name = (TextView)view
.findViewById(R.id.tv_prod_name);
tv_prod_price = (TextView)view
.findViewById(R.id.tv_prod_price);
img_prod = (ImageView)view
.findViewById(R.id.img_prod);
}
}
}
请帮助获取 context.This 我是如何设置适配器的:
RecyclerView.Adapter adapter = new
DataAdapter(al_prod_id,al_prod_name,
al_prod_price,al_prod_image);
在您的适配器 Context 上下文中声明一个数据成员; 像这样为您的适配器编写构造函数,
DataAdapter(Context context, otherAurguments);
并且在创建适配器时
DataAdapter adapter = new DataAdapter(yourActivityName.this , otherAurguments);
将您的构造函数更改为
private Context context;
public DataAdapter(Context context, ArrayList<String> al_prod_id,
ArrayList<String> al_prod_name,
ArrayList<String> al_prod_price,
ArrayList<String> al_prod_image) {
this.context = context;
this.al_prod_id = al_prod_id;
this.al_prod_price = al_prod_price;
this.al_prod_name = al_prod_name;
this.al_prod_image = al_prod_image
}
现在将您的适配器命名为
RecyclerView.Adapter adapter = new
DataAdapter(context, al_prod_id,al_prod_name,
al_prod_price,al_prod_image);
此处的上下文是您的 activity 参考。希望对你有帮助。
每个视图都有一个上下文。我建议您使用 getApplicationContext()
来防止应用程序在 activity 上下文变为 null
Picasso.with(itemView.getContext()).load(al_prod_image.get(i))
或
Picasso.with(itemView.getContext().getApplicationContext()).load(al_prod_image.get(i))
最简单的解决方案是使用 viewHolder.itemView.getContext()
Picasso.with(viewHolder.itemView.getContext()).load(al_prod_image.get(i))
.placeholder(R.drawable.floatingicon)
.error(R.drawable.floatingicon).
.into(viewHolder.img_prod);
来自 Activity,
RecyclerView.Adapter adapter = new DataAdapter(YOUR_ACTIVITY.this, al_prod_id,al_prod_name, al_prod_price,al_prod_image);
在适配器中,
private Context context;
public DataAdapter(Context mContext, ArrayList<String> al_prod_id, ArrayList<String> al_prod_name, ArrayList<String> al_prod_price, ArrayList<String> al_prod_image) {
this.context= mContext;
this.al_prod_id = al_prod_id;
this.al_prod_price = al_prod_price;
this.al_prod_name = al_prod_name;
this.al_prod_image = al_prod_image
}
在 Picasso 的上下文中使用它
Picasso.with(context).load(al_prod_image.get(i))
.placeholder(R.drawable.floatingicon)
.error(R.drawable.floatingicon).
.into(viewHolder.img_prod);
将您的 activity 上下文传递给 DataAdapter
RecyclerView.Adapter adapter = new DataAdapter(yourActivity.this,al_prod_id,al_prod_name,
al_prod_price,al_prod_image);
数据适配器
private Context mContext;
private ArrayList<String> al_prod_name,al_prod_price,al_prod_id,al_prod_image;
public DataAdapter(Context mContext,ArrayList<String> al_prod_id, ArrayList<String> al_prod_name,ArrayList<String> al_prod_price, ArrayList<String> al_prod_image)
{
this.mContext=mContext;
this.al_prod_id = al_prod_id;
this.al_prod_price = al_prod_price;
this.al_prod_name = al_prod_name;
this.al_prod_image = al_prod_image
}
//set image
Picasso.with(mContext).load(al_prod_image.get(i))
.placeholder(R.drawable.floatingicon)
.error(R.drawable.floatingicon).
.into(viewHolder.img_prod);
像这样更改您的 DataAdapter 构造函数在您的适配器中创建一个 Context 对象 class 并像这样更改您的构造函数
public DataAdapter(Context context,ArrayList<String> al_prod_id,
ArrayList<String> al_prod_name,
ArrayList<String> al_prod_price,
ArrayList<String> al_prod_image) {
this.al_prod_id = al_prod_id;
this.al_prod_price = al_prod_price;
this.al_prod_name = al_prod_name;
this.al_prod_image = al_prod_image;
this.mContext = context;
}