Android TableLayout динамический или фиксированный размер

Я новичок в Android, и мне интересно, что делать с большой таблицей, которую я хочу отобразить.

В настоящее время я тестирую TableLayout с 100 TableRows. Окончательная таблица будет содержать гораздо больше строк, порядка тысяч.
Поскольку TableLayout является представлением, мне интересно, какой правильный или рекомендуемый подход в таком случае. Использовать представление (TableLayout), содержащее все имеющиеся у меня данные, или динамически добавлять/удалять строки в просматриваемом окне по мере того, как пользователь прокручивает вверх и вниз.

Каковы плюсы и минусы различных подходов? Примеры?


person ilomambo    schedule 24.04.2012    source источник


Ответы (1)


Самым явным недостатком одновременного отображения их всех на экране является то, что ОС, по сути, должна иметь все тысячи ваших объектов View в памяти одновременно - ОЧЕНЬ дорого с точки зрения памяти.

С другой стороны, создание и уничтожение представлений при прокрутке загружает процессор и значительно замедляет работу пользовательского интерфейса.

Основная альтернатива (и та, которую андроид использует в своем элементе управления ListView (который, вероятно, вы должны использовать вместо этого, кстати), состоит в том, чтобы создать только достаточное количество представлений для заполнения экрана (плюс небольшое дополнение с обеих сторон) и когда один уходит сверху, повторно используйте его внизу, изменяя его свойства, а не создавая совершенно новое представление.

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

person JRaymond    schedule 24.04.2012
comment
Я согласен. Я не хочу изобретать велосипед. Вы знаете, где я могу увидеть пример кода этой техники? - person ilomambo; 25.04.2012
comment
Этот относительно тщательный ... Должен указать Hulu в правильном направлении. mkyong.com/android/android-listview-example - person JRaymond; 25.04.2012
comment
Большое спасибо. И последняя деталь: глядя на XML-файлы в присланном вами примере, мне интересно, может ли элемент ListView иметь любое количество дочерних элементов? Если я помещу туда 10 TextView, могу ли я перебрать их и сделать их ВИДИМЫМИ/НЕВИДИМЫМИ? - person ilomambo; 26.04.2012
comment
@ilomambo Элемент в listView может иметь столько дочерних элементов, с которыми вы хотите иметь дело - установка их видимыми/невидимыми будет задачей адаптера в методе getView() - person JRaymond; 26.04.2012