Android, как поместить hashset в адаптер для использования в списке

вот моя проблема, например

у меня есть класс, который определяет квитанцию ​​объекта, этот класс имеет все квитанции в HashSet

public static Set<Receipt> allInstances = new HashSet<Receipt>();

здесь у меня также есть getNumber(), getDate() и т. д. все геттеры

теперь в Android я хочу отображать квитанции в ListView, у меня уже есть класс public class ReceiptListFragment extends ListFragment

здесь о методе OnCreate, что мне делать?

мне нужна максимальная производительность для моего кода, я уже видел listview и arrayadapter с ViewHolder для кодов максимальной производительности в Интернете

моя настоящая проблема заключается в том, что у меня есть HashSet с объектами, которые я не могу получить в классе адаптера в методе getView getNumber, чтобы установить текст в текстовом представлении, единственный способ, которым я думал, делал это так

for(Receipt r : Receipt.allInstances){
TextView tv = (TextView) v.findViewById(R.id.receipt_row);
tv.setText("" + r.getNumber());

добавление динамически

но при этом я не использую адаптер, что произойдет с производительностью? также, поскольку у меня есть HashSet, у меня нет позиции, и у него могут быть повторяющиеся объекты (это нормально и задумано)

Должен ли я сделать цикл, как раньше, и передать весь хэш-набор в список только для того, чтобы использовать список и выполнить setListAdapter, это выглядит не очень хорошо с точки зрения производительности, поскольку количество объектов может быть высоким.

с точки зрения производительности лучше делать это динамически или передавать все объекты в список и использовать адаптер с просмотрщиком и т. д., как и во всех примерах.

или есть лучшее решение?


person luis    schedule 05.11.2012    source источник
comment
если у вас есть длинный список и вы заботитесь о производительности, тогда вы хотите использовать адаптер (и использовать преобразование-представление). вы можете перебрать свой HashSet и поместить только те строки, которые вам нужны, в массивы координат и использовать их для работы вашего адаптера. это было бы лучше с точки зрения производительности, чем работа с самим объектом. Если вам больше не нужны объекты, вы должны поместить метод setPosition() в каждую квитанцию, а затем предпринимать действия в getview только в том случае, если правильный объект getPosition() соответствует желаемому хэш-коду, но я думаю, что первое решение гораздо более прямолинейно.   -  person mango    schedule 05.11.2012


Ответы (1)


Если вы хотите использовать список, вы можете попробовать следующее:

ArrayList<Receipt> receiptsList = new ArrayList<Receipt>(allInstances);

Создайте свой adapter с receiptsList и используйте setListAdapter(adapter). Посмотрите здесь: http://www.vogella.com/articles/AndroidListView/article.html#listfragments

person Andrea Motto    schedule 03.03.2013