2015-04-18 6 views
1

Я создаю приложение Android со списком, и я хотел бы поместить изображения из разных URL-адресов в свой список. Я получаю изображения с моего сервера веб-сайта, точно так же.Как я могу вставить picasso в адаптер

www.mywebsite.com/image1.jpg 

Название изображения и расширение находятся внутри json-файла.

Я слышал, что Пикассо делает именно то, что я хочу. И мне просто нужно сделать:

//Initialize ImageView 
ImageView imageView = (ImageView) findViewById(R.id.imageView); 

//Loading image from below url into imageView 

Picasso.with(this) 
    .load("URL HERE") 
    .into(imageView); 

Но, я передаю данные к адаптеру, и я не знаю, как я могу изменить код Picasso в моем адаптере код.

@Override 
protected void onPostExecute(Void result) { 
    super.onPostExecute(result); 
    // Dismiss the progress dialog 
    if (pDialog.isShowing()) 
     pDialog.dismiss(); 
    /** 
    * Updating parsed JSON data into ListView 
    * */ 
    ListAdapter adapter = new SimpleAdapter(
      ListUsersActivity.this, contactList, 
      R.layout.list_row, new String[] { TAG_NAME }, new int[] { R.id.name, 
        }); 

    setListAdapter(adapter); 
} 

Как вы можете видеть, я уже умирал имя пользователя к TextView называется именем, теперь, я хотел бы передать PICTURE_NAME к ImageView под названием аватар. Как я могу это сделать?

спасибо.

ответ

2

вы не можете «передать Picasso» на адаптер. Вы должны создать свой собственный адаптер, это не так сложно, как кажется. Он может даже основываться на 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); 
+0

Почему я получаю: TAG_IMAGE не может быть разрешен переменной? – Abc

Смежные вопросы