如何在ListView中从HashMap获取值?

时间:2011-06-01 20:24:51

标签: android

我通过扩展BaseAdapter创建了自己的自定义适配器。我只是希望能够在我的value方法中获取onItemClick的字符串(因此我可以将其设为intent extra)。我怎么能这样做?

我的自定义adapter如下所示:

   private class HashMapAdapter extends BaseAdapter {

        private HashMap<String, String> mMap = new HashMap<String, String>();
        private String[] mKeys;
        private Context mContext;

        private HashMapAdapter(Context context, HashMap<String, String> map) {
            mContext = context;
            mMap = map;
            mKeys = mMap.keySet().toArray(new String[map.size()]);          
        }

        @Override
        public int getCount() {
            return mMap.size();
        }

        @Override
        public Object getItem(int position) {

            return mMap.get(mKeys[position]);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
//          String key = mKeys[position];

            RowView row;
            if(convertView == null) {
                row = new RowView(getBaseContext());
            } else {
                row = (RowView) convertView;
            }
            row.display(mKeys[position]);
            return row;

        }

    }

3 个答案:

答案 0 :(得分:0)

不知道为什么我以前无法让它工作,但这是怎么做的:

intent.putExtra("url",  arg0.getAdapter().getItem(arg2).toString());

答案 1 :(得分:0)

在getView方法中,您可以使用

检索值
mMap.get(mKeys[position]);

虽然我不是1000%肯定

答案 2 :(得分:0)

使用LinkedHashMap并使用

根据位置获取值
ArrayList<LinkedHashMap<Integer, String>> myCalandersAvailable2

在getView中

String value = (new ArrayList<String>(myCalandersAvailable2
                .get(position).values())).get(position);

它会告诉你如何做。

或使用此方法根据LinkedHashMap的位置获取值

public Object getElementAt(LinkedHashMap map, int index) {
    for (Map.Entry entry : map.entrySet()) {
        if (index-- == 0) {
            return entry.value();
        }
    }
    return null;
}