【问题标题】:Get Hashmap item from custom adapter从自定义适配器获取 Hashmap 项
【发布时间】:2015-07-09 20:27:22
【问题描述】:

我可以知道如何从自定义适配器获取 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 字符串。 总是得到 ​​p> 的错误

“不兼容的类型”(需要String,但找到的是对象)

对于这一行

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

【问题讨论】:

    标签: android hashmap custom-adapter simpleadapter


    【解决方案1】:

    您要投射的对象应该具有确切的类型。转换为泛型 Map 不会强制执行泛型的编译时检查。

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

    【讨论】:

      【解决方案2】:

      只需更改此设置

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

      【讨论】:

        【解决方案3】:

        使用

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-11-15
          • 1970-01-01
          • 1970-01-01
          • 2012-06-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多