How do i pass picasso into listView adapter

后端 未结 1 1103
情书的邮戳
情书的邮戳 2021-01-26 14:27

i need to pass this line into the list adapter

Picasso.with(getActivity()).load(imageurl).into(imageOrders);

List

相关标签:
1条回答
  • 2021-01-26 14:47

    you can't "pass Picasso" to the adapter. You have to create your own custom adapter, it's not as daunting as it sounds. It may even be based on the SimpleAdapter. Like this:

    public class MyAdapter extends SimpleAdapter{
    
       public MyAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to){
          super(context, data, resource, from, to);
    }
    
       public View getView(int position, View convertView, ViewGroup parent){
          // here you let SimpleAdapter built the view normally.
          View v = super.getView(position, convertView, parent);
    
          // Then we get reference for Picasso
          ImageView img = (ImageView) v.getTag();
          if(img == null){
             img = (ImageView) v.findViewById(R.id.imageOrders);
             v.setTag(img); // <<< THIS LINE !!!!
          }
          // get the url from the data you passed to the `Map`
          String url = ((Map)getItem(position)).get(TAG_IMAGE);
          // do Picasso
          Picasso.with(v.getContext()).load(url).into(img);
    
          // return the view
          return v;
       }
    }
    

    then you can just use this class without the image on the parameters (but it must still exist inside orderList).

    ListView list= (ListView) getActivity().findViewById(R.id.list);
    ListAdapter adapter = 
           new MyAdapter(
                    getActivity(),
                    orderList,
                    R.layout.order_usa_row,
                    new String[]{TAG_PRICE,TAG_TITLE,TAG_PSTATUS,TAG_PRICESYMBOL},
                    new int[]{R.id.price,R.id.title,R.id.pstatus,R.id.symbol});
    list.setAdapter(adapter);
    
    0 讨论(0)
提交回复
热议问题