Android: карта ArrayList's - PullRequest
       10

Android: карта ArrayList's

0 голосов
/ 05 мая 2011

Я использую собственный адаптер списка и ArrayList для моего ListView. Это решение было достаточно хорошим, но теперь мне нужно использовать Map of ArrayLists, что-то вроде этого:

TreeMap<String, ArrayList<ItemsModel>>

где ItemsModel - это Java-бин. Ранее я заполнял этот ArrayList следующим образом:

itemsDataArrayList.add(itemModel)

Теперь я столкнулся с некоторыми трудностями с интерфейсом Map. Во-первых, я не знаю, как заполнить мою новую структуру карты: я предполагаю, что это

mapInstance.put(itemModel.getItemName.toString(), itemsDataArrayList)

не будет работать, так как itemsDataArrayList - это список элементов, а не определенный элемент.

Во-вторых, я не уверен, как правильно объявить этот экземпляр карты в моем классе ItemsAdapter. Когда я использовал только ArrayList, это было очень просто. Некоторые примеры были бы очень полезны.

Ответы [ 2 ]

2 голосов
/ 05 мая 2011

Я рекомендую вам попробовать / попробовать создать собственный BaseAdapter. Когда вы переопределяете этот класс, он предоставит вам все функции, которые нужно переопределить для заполнения списка.

Это дает вам преимущество в том, что вы получаете полный контроль над тем, что помещается в представление списка и как создается каждое представление.

Затем, после того, как вы запустите его, я рекомендую изучить шаблон дизайна ViewHolder вместе с перезаписываемыми представлениями, что является отличным способом повышения эффективности при прокрутке списка.

1 голос
/ 05 мая 2011

То, что вы действительно ищете, похоже на MultiMap . На ваш первый вопрос - ваша попытка была довольно хорошей, вы можете поместить ArrayLists только в качестве значений в TreeMap.

Проблема с этим может заключаться в том, что если вы хотите добавить какую-либо ItemsModel на вашу карту, вам сначала нужно получить список ключей, а затем добавить ItemsModel в этот список. Кроме того, вам необходимо убедиться, что этот список для данного ключа существует, и если нет, создать его.

Пример:

String key = "hi";
ArrayList keyList = mapInstance.get(key);
if (keyList == null) {
   keyList = new ArrayList();
   mapInstance.put(key, keyList);
}
keyList.add(itemsModelInstance);

A get() / contains() и т. Д. Могут быть как-то равны. Я бы посоветовал вам создать собственную реализацию Multimap<?,?> или просто взять существующую, например, из Гуавы (ссылка выше).

С уважением,

AVI

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...