2015-04-30 1 views
1

Могу ли я узнать, как получить HashMap элемент из пользовательского адаптераПолучить Hashmap элемент из пользовательского адаптера

Код:

ArrayList<HashMap<String, String>> feeds_List; 
... 
... 
HashMap<String, String> map = new HashMap<String, String>(); 
          // adding each child node to HashMap key => value 
           map.put("username", usr_name); 
           map.put("datetime", feed_date); 
           map.put("pts", point_txt); 
           map.put("pic", pic); 
          // adding HashList to ArrayList 

          feeds_List.add(map); 

ListAdapter adapter = new ExtendedSimpleAdapter(
           getActivity(), feeds_List, 
           R.layout.feed_item, new String[]{"username", "datetime", "pts"}, 
           new int[]{R.id.usr_name, R.id.feed_time, R.id.no_stamp}); 
         setListAdapter(adapter); 

Мой заказ адаптер:

public class ExtendedSimpleAdapter extends SimpleAdapter{ 
     Context context2; 

    public ExtendedSimpleAdapter(Context context, List<? extends Map<String, String>> data, int  resource, String[] from, int[] to){ 
     super(context, data, resource, from, to); 
     context2=context; 
    } 

    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.usr_pic); 
      v.setTag(img); // <<< THIS LINE !!!! 
     } 
     // get the url from the data you passed to the `Map` 
     String TAG_IMAGE="pic"; 
     String url = ((Map)getItem(position)).get("pic"); 




     // do Picasso 
     // maybe you could do that by using many ways to start 

     Picasso.with(context2) 
       .load(url) 
       //.resize(100, 100) 
       .into(img); 

     // return the view 

     return v; 
    } 
} 

Вот проблема:

Я не могу получить строку url в пользовательском адаптере. всегда получаю ошибки

"Несовместимые типы" (необходимая строка, но обнаружили, объект)

для этой линии

String url = ((Map)getItem(position)).get("pic"); 

ответ

2

Объект, который вы опалубок, должны иметь точный тип. Приведение к общей карте не обеспечивает проверку времени компиляции, для которой предназначены дженерики.

String url = ((Map<String, String>)getItem(position)).get("pic"); 
2

Использование

private ArrayList<Map<String, String>> data; 

Map<String, String> category = new Map<String, String>(); 
    category = data.get(position); 
    String url=category.get("pic"); 
0

Просто изменить это

String url = ((Map)getItem(position)).get("pic"); 

в

String url = list.get(position).get("pic"); 

Также здесь

Context context2; 
List<HashMap<String, String>> list; 
public ExtendedSimpleAdapter(Context context, List<HashMap<String, String>> data, int  resource, String[] from, int[] to){ 
    super(context, data, resource, from, to); 
    context2=context; 
    this.list = data; 
}