2011-10-05 21 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中提供了正確的記錄。