我有一个ListView,它是从字符串数组资源填充的。我试图找出如何使用键值类型的结构,以便键在ListView中显示,当选择一行时我可以得到值。
我知道我可以为值维护一个单独的数组,并使用行的选定索引进行查找,但这很难维护。
另外我想我可以创建一个POJO并使用我自己的自定义列表适配器构建包含这些对象的列表,但是如果可能的话我想只使用一个简单的xml文件。
我正在阅读文档以了解我是否可以在xml中执行此操作,但我还没有找到这样的内容吗?
谢谢你的时间。
答案 0 :(得分:1)
您可能希望使用订购的地图,例如TreeMap或LinkedHashMap,并将其传递给您的适配器。
这将实现您想要实现的目标。
你基本上需要一个使用Key-Value对数据结构(Map)的适配器并在列表视图中设置它,如:
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;
}
}
答案 1 :(得分:0)
我相信您使用自定义列表适配器的第二个建议将是您想要做的最简单的解决方案。
SimpleAdapter驱动您提到的XML文件方法,并且特别关注它接收的数据格式。如果您可以重构输入数据的格式以匹配,SimpleAdapter将正常工作。
否则使用ArrayAdapter和POJO,并构建实现所需的列表。
答案 2 :(得分:0)
我刚刚创建了一堆POJO,并使用自定义列表适配器显示列表行中Object的相关数据。