Как передать Picasso в адаптер listView

мне нужно передать эту строку в адаптер списка

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

Список

ListView list= (ListView) getActivity().findViewById(R.id.list);
ListAdapter adapter=new SimpleAdapter(getActivity(),orderList,R.layout.order_usa_row,
new String[]{TAG_PRICE,TAG_TITLE,TAG_PSTATUS,TAG_PRICESYMBOL,TAG_IMAGE},new int[]{R.id.price,R.id.title,R.id.pstatus,R.id.symbol,R.id.imageOrders});

list.setAdapter(adapter);

я новичок, много перепробовал, но не могу разобраться, помогите пожалуйста


person Alex    schedule 30.09.2014    source источник


Ответы (1)


вы не можете «передать Пикассо» адаптеру. Вы должны создать свой собственный адаптер, это не так сложно, как кажется. Он может быть даже основан на SimpleAdapter. Как это:

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

тогда вы можете просто использовать этот класс без изображения в параметрах (но он все равно должен существовать внутри 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);
person Budius    schedule 30.09.2014
comment
Я нашел неправильную деталь в своем коде, пожалуйста, проверьте редактирование, я указал стрелкой, например: ‹‹‹ ЭТА СТРОКА - person Budius; 30.09.2014
comment
я использовал ваш предыдущий код, но удалил строку, начинающуюся с Stringurl, и поместил загрузку (строка из JSONObject (imagelink)) и она работает для 1 элемента списка, на данный момент у меня есть только один элемент в списке, затем проверим другой парень добавит больше элементов списка в json - person Alex; 30.09.2014
comment
Итак, как я могу добавить все это в активность? stackoverflow.com/questions/55860377/ - person user3099225; 26.04.2019