2011-08-23 41 views
1

我有一个从字符串数组资源填充的ListView。我试图找出如何使用键值类型的结构,以便将键显示在ListView中,并且当选择一行时,我可以获取该值。使用键值映射类型结构的Android ListView可能吗?

我知道我可以为值保留一个单独的数组,并使用行的选定索引进行查找,但这很难维护。

此外,我想我可以做一个POJO,并与我自己的自定义列表适配器与这些对象建立列表,但我想只使用一个简单的XML文件,如果可能的话。

我正在阅读文档,看看我是否可以在XML中做到这一点,但我还没有发现这样的事情吗?

感谢您的时间。

回答

0

我刚刚创建了一堆的POJO和使用自定义列表适配器来显示列表行中对象的相关数据。

+0

你可以请发布示例代码? –

0

我相信你的第二个使用自定义列表适配器的建议将成为你想要做的最简单的解决方案。

SimpleAdapter驱动您提到的XML文件方法,并且特别关注它所接收数据的格式。如果您可以重构输入数据的格式以匹配,则SimpleAdapter将正常工作。

否则使用ArrayAdapter和POJO,并构建您的实现所需的列表。

+0

看来,没有一个'安卓'的方式来做到这一点。我将不得不将自己的XML解析到地图中,或者只是在代码中构建地图grrr。 – C0deAttack

+0

您可以让XStream为您做很多工作:http://stackoverflow.com/questions/1537207/how-to-convert-xml-to-java-util-map-and-vice-versa。我还没有尝试在Android的XStream,但他们的文档表明它的工作原理,取决于你是否可以负担额外的jar依赖... – seanhodges

1

您可能想要使用已订购的地图,如TreeMapLinkedHashMap,并将其传递到您的适配器。

这将启用你想要实现的。

你基本上需要有利用键值对数据结构(图)适配器,并设置它在你的列表视图,是这样的:



public class OrderedMapAdapter extends BaseAdapter { 

     Map.Entry[] entries; 

     /*** 
     * Pass the key value pair map using an ordered map data structure 
     * @param orderedMap An ordered map, either LinkedHashMap or TreeMap 
     */ 
     public OrderedMapAdapter(LinkedHashMap orderedMap) { 
      this.entries = orderedMap.entrySet().toArray(new Map.Entry[0]); 
     } 

     public int getCount() { 
      return entries.length; 
     } 

     /*** 
     * This should get you the position you want in Key-value pair format 
     * that you could use whenever the row is selected 
     */ 
     public Map.Entry getItem(int position) { 
      return entries[position]; 
     } 

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

     public View getView(int position, View convertView, ViewGroup parent) { 
      // display your view here 
      return null; 
     } 
    } 

+0

对不起,但我不知道你已经正确地阅读我的问题,我没有问使用什么Java类型。我在问如何在XML中声明Map并在ListView中使用它。 – C0deAttack

+0

嗯,我可能有。当你说字符串数组资源时,你是否在说要放入ListView中的strings.xml? – momo

+0

不,当我说字符串数组时,我只是描述了迄今为止我所做的以及我想如何实际做一些有点不同的事情,正如我后面所描述的那样。无论如何,没有内置的'android'方法来做到这一点,所以我用静态数组来做。 – C0deAttack

相关问题