2011-06-01 72 views
0

我通过扩展BaseAdapter创建了自己的自定义适配器。我只想在我的onItemClick方法中抓住value的字符串(所以我可以把它作为intent extra)。我怎样才能做到这一点?如何从ListView中的HashMap中获取值?

我定制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; 

     } 

    } 
+2

呼唤你的'的getItem(...)'方法不起作用位置值?你有什么尝试? – 2011-06-01 20:37:12

回答

0

不知道为什么我不能让它工作之前,但是这是如何做到这一点:

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

在getView方法你可以通过使用

mMap.get(mKeys[position]); 

虽然我不是1000%确定

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