如何在ListView的每个项目中存储多个值?

时间:2013-10-22 13:45:54

标签: android android-arrayadapter

我有一系列项目,如:

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为“第二项” ”

我怎样才能实现这样的目标?谢谢!

4 个答案:

答案 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。