0

我有一系列项目,例如:

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

4 回答 4

3

您可以使用HashMap将 Key 存储为 First item并将 value 存储为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

希望这对您有所帮助。

于 2013-10-22T14:15:57.447 回答
1

您需要实现自定义适配器,而不是使用 ArrayAdapter。您可以实现一个 BaseAdapter 类,并且可以使用 SparseArray 作为数据数组。SparseArrays 是通用的,并按索引提供 getter,这正是您提供 ListView 所需的。

于 2013-10-22T13:52:47.227 回答
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]);
于 2013-10-22T13:54:35.953 回答
0

看看SimpleAdapter代替 ArrayAdapter。

于 2013-10-22T14:02:07.283 回答