繁体   English   中英

如何将上下文传递给毕加索

[英]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);
                       }
                       }
                       }

请帮助获取上下文。这是我设置适配器的方式:

                       RecyclerView.Adapter adapter = new 
                       DataAdapter(al_prod_id,al_prod_name,
                       al_prod_price,al_prod_image);

最简单的解决方案是使用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);

将您的构造函数更改为

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

这里的上下文是您的活动参考。 希望对您有帮助。

将您的活动上下文传递给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 context, otherAurguments);

并且在创建适配器时

DataAdapter adapter = new DataAdapter(yourActivityName.this , otherAurguments);

每个视图都有上下文。 我建议您使用getApplicationContext()防止活动上下文为空时应用崩溃

Picasso.with(itemView.getContext()).load(al_prod_image.get(i))

要么

Picasso.with(itemView.getContext().getApplicationContext()).load(al_prod_image.get(i))

在活动中,

 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.with(context).load(al_prod_image.get(i))
                   .placeholder(R.drawable.floatingicon)
                   .error(R.drawable.floatingicon).
                   .into(viewHolder.img_prod);

像这样更改您的DataAdapter构造函数,在您的适配器类中创建一个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.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;
                               }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM