我有一系列项目,如:
items[0] = "Item 1";
items[1] = "Item 2";
...
我用这个填充我的ListView list1:
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, items);
list1.setAdapter(arrayAdapter);
我得到的项目价值如下:
list1.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String a = parent.getAdapter().getItem(position).toString();
...
并且有效,但我确实需要在每个项目中存储更多值。例如,我想要一个名为“First item”的项目出现在列表中,但是当我点击它时,我得到一个关联值,就像一个数字。
示例:
items[0] = {7,"First item"};
items[1] = {100,"Second item"};
我只想在列表中出现“第一项”和“第二项”,但是当我点击它时,我检索整数,在这种情况下,7为“第一项”,100为“第二项” ”
我怎样才能实现这样的目标?谢谢!
答案 0 :(得分:3)
您可以使用HashMap
将密钥存储为第一项,将值存储为 7 ,并且同样明智。
String[] items = { "First item", "Second item", "Third item"};
HashMap<String, Integer> hashmap=new HashMap<String, Integer>();
hashmap.put("First item", 7);
hashmap.put("Second item", 100);
hashmap.put("Third item", 200);
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, items);
list1.setAdapter(arrayAdapter);
list1.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String textValue = parent.getAdapter().getItem(position).toString();
int value=hashmap.get(textValue);
System.out.println(textValue);
System.out.println(value+"");
}
O / P:点击第一项时。
10-22 13:57:49.778: I/System.out(1038): First item
10-22 13:57:49.778: I/System.out(1038): 7
希望这对你有所帮助。
答案 1 :(得分:1)
您需要实现自定义适配器,而不是使用ArrayAdapter。您可以实现一个BaseAdapter类,也可以使用SparseArray作为数据数组。 SparseArrays是通用的,并且通过索引提供getter,它正是您提供ListView所需的内容。
答案 2 :(得分:1)
为什么不将返回值存储在第二个数组中?
items[0] = "first item";
items[1] = "second item";
value[0] = 7;
value[1] = 100;
然后从值数组中获取返回值:
Log.i("SELECTED",item[position]);
Log.i("RETURNED",value[position]);
答案 3 :(得分:0)
查看SimpleAdapter代替ArrayAdapter。