Подтвердить что ты не робот

ListView или TableLayout?

Теперь я действительно запутался, чему учиться. Я разработчик приложений для iPhone и изучаю разработку Android.

Я узнал, как использовать ListView со статическим массивом строк, используя Adapter. Я привык использовать пользовательские ячейки в iPhone, в основном для отображения динамического содержимого, такого как изображения и текст в TableView s.

Итак, каков способ пойти на это в Android? TableLayout или ListView?

4b9b3361

Ответ 1

Как уже отмечалось в комментариях, вам нужно четко определить, что вы хотите сделать, прежде чем принять конкретное решение о том, какой тип макета использовать. Тем не менее, я могу, конечно, понять путаницу, возникающую из-за того, что вы пытаетесь решить, какой тип класса макета использовать, потому что для достижения той же цели часто бывает несколько вариантов. Например, чтобы создать список элементов с вертикальной прокруткой, вы можете сначала выбрать вертикальный LinearLayout, который вы разместили бы внутри ScrollView. Но, с другой стороны, для достижения аналогичного конечного результата вы можете использовать ListView вместе с подходящим Adapter.

Аналогично, чтобы показать сетку элементов, которые можно прокручивать по вертикали, вы можете использовать TableLayout внутри a ScrollView. Или аналогичный результат может быть достигнут при использовании a GridView, опять же путем подачи данных через подходящий Adapter.

Теперь первое ключевое различие заключается в следующем: Классы типа LinearLayout и TableLayout требуют, чтобы вы поставляли дочерние элементы либо в макетах XML, либо программно в коде. Классы типа ListView и GridView (и несколько других) очень разные, потому что они являются подклассами android.widget.AdapterView. Особенность классов AdapterView заключается в том, что для привязки данных к ним используется Adapter. Итак, вернемся к примеру вертикального списка элементов, если вы показывали группу элементов списка дочерних элементов внутри LinearLayout на основе некоторых данных массива, вам нужно было бы программно создать и добавить child View в это LinearLayout на основе данных массива. С ListView с другой стороны, индивидуальный View, представляющий дочерние элементы, предоставляется из подходящего Adapter. Таким образом, вместо того, чтобы вы программно заполняли макет всеми дочерними элементами (например, в случае с LinearLayout или TableLayout), макет Adapter вместо этого вызывает Adapter, чтобы получить дочерний элемент View как и когда он им нужен.

Эта последняя точка - это следующее ключевое различие, которое, как я полагаю, вы должны понимать в отношении макетов на основе Adapter: они намного эффективнее демонстрируют большие объемы данных в ситуациях, когда большая часть данных прокручивается из поля зрения. Например, ListView гораздо эффективнее использовать для отображения большого списка прокрутки элементов, чем если бы вы просто заполнили LinearLayout всеми элементами и поместили его внутри ScrollView. Причиной этой эффективности является то, что макеты AdapterView основаны не на всех дочерних View всех одновременно. Вместо этого, когда пользователь прокручивает список, существующие дочерние представления "перерабатываются" или "преобразуются" с помощью Adapter, чтобы показать следующие дочерние элементы. Чтобы проиллюстрировать это на примере: вам нужен прокручиваемый вертикальный список из 100 элементов. Однако экран может быть достаточно большим, чтобы отображать 7 одновременно. Представьте, что вы используете LinearLayout внутри ScrollView для отображения 100 элементов списка. Это означает, что контейнер LinearLayout имеет 100 дочерних Views. Эти дети всегда присутствуют в макете и должны обрабатываться системой во время событий прокрутки, даже если на экране одновременно может отображаться только семь. Это требует дополнительного времени процессора, значительного объема оперативной памяти, а прокрутка может быть вялой. Теперь, с ListView, макет, вероятно, будет содержать только 7 или 8 дочерних View s. Когда пользователь прокручивает, те дочерние View динамически конвертируются или повторно создаются с помощью Adapter, через которые вы связываете свои данные. Пользователь будет выполнять более быструю и плавную прокрутку. С точки зрения программирования обычно гораздо более элегантно связывать списки данных с помощью Adapter. Когда вы имеете дело со списками прокрутки или сетками Bitmap s, ограничения памяти устройства Android также означают, что использование AdapterView очень важно.

Имейте в виду, что, отвечая на это, я сделал предположение, что вы пытаетесь показать вертикальный или табличный список элементов, которые можно прокручивать, возможно, включая Bitmap s, и я концентрируюсь на типе макета, который вы использовали для достижения макета и прокрутки этих данных. Классы макетов, такие как LinearLayout, TableLayout и т.д., Однако, являются важными классами, которые вы будете использовать все время для формирования отдельных компоновочных блоков для ваших приложений. Если весь ваш список будет помещен в экран и не будет прокручиваться, то дополнительная сложность использования Adapter (а не того, что это действительно так сложно) может быть бессмысленной, и вы можете просто захотеть использовать TableLayout или что-то еще.

Ответ 2

Android-эквивалент iOS UITableView - это класс ListView.

Он очень мощный и может быть заполнен данными из разных источников в зависимости от типа Adapter, который вы прикрепляете к нему. Возможно, вы захотите ознакомиться с этим ListView и ListActivity.

Ответ 3

1. Если вы хотите dynamic data в CUSTOM VIEW в форме списка, то ListView с BaseAdapter или ArrayAdapter - это путь...

2. TableLayout будет иметь полностью другое использование, в основном я использую его для отображения данных, которые необходимо отображать в виде стека.. (т.е. один над другим....)

См. приведенные ниже ссылки для быстрого понимания и реализации:

http://www.ezzylearning.com/tutorial.aspx?tid=1763429

http://www.vogella.com/articles/AndroidListView/article.html