2011-10-05 53 views
3

我一直在ListView对象上使用ArrayListAdapter。我想知道是否有一种简单的方法来为每个listview项目存储一些额外的数据作为标签对象。Android的ListView和标签

回答

9

通常您使用字符串数组或列表作为数组列表的数据,并且适配器方法getItem(position)将返回相应的字符串。

但是,您可以使用任何对象数组或列表作为输入,因此将任何数据作为列表项传递。例如:

class MyListItem { 

    private int mId; 
    private Object mData; 
    private String mListItemName; 

    public MyListItem(int id, Object data, String name) { 
     mId = id; 
     mData = data; 
     mListItemName = name; 
    } 

    @Override 
    public String toString() { 
     return mListItemName; 
    } 
} 

可以传递的MyListItem数组的数组适配器,它将使用toString()以获取项目的名称。您可以使用(MyListItem) adapter.getItem(position)获取项目数据。

+0

这是对这个问题的一个很好的回答,并且让我想起尝试设计最正确的解决方案时总会出现的真实设计。还有其他的解决方法,但这是正确的方法。谢谢。 – raddevus

+0

哦,男孩,这个答案值得至少500 upvotes! – Dave

1

关于支持过滤的列表适配器的注意事项。将onItemClick()提供的位置值与关联数组的索引进行逻辑关联很容易。但是,这样做会导致列表过滤时出现问题。

案例:过滤的SimpleAdapter。未经过滤的,onItemClick()提供了ListView中项目的位置以及与ListView关联的数组中项目的位置。筛选后,onItemClick提供了项目在显示列表中的位置,但不再匹配相关数组中项目的索引。然而,getItemAtPosition()使用位置值从关联数组中检索正确的项目。 getItemAtPosition()也在CursorAdapter中提供了正确的记录。