Как динамически создать макет XML несколько раз в методе getview() в Android?

Я уже создал xml-layout файл, который содержит View как поле для комментариев. Я хочу создать динамически макет (поле для комментариев) несколько раз внутри getView() метод. Как я могу создать его динамически внутри getView() метод?

Здесь внутри getview() Метод, который я использовал код для динамического генерирования конкретного View несколько раз, но это не работает. Пожалуйста, дайте мне предложение.

Ссылка на код моего адаптера ниже:

http://pastebin.com/aAYdPbn9

1 ответ

Решение

Я вижу три подхода для вас. Как обсуждалось в комментариях, заголовок вашего вопроса вводит в заблуждение, поэтому я предполагаю, что:

  • у вас есть список карт, которые вы хотите отобразить
  • каждая карта может иметь список комментариев

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

Вы можете решить свою проблему:

  1. Использование ExpandableListView, где карточки являются родителями, а комментарии являются дочерними элементами. См. [1] для примера.

  2. Выровняйте свою иерархию данных. Таким образом, у вас есть только список элементов, где карточки как-то рассматриваются как "заголовки" или "разделители" для ваших комментариев. Вам нужно перезаписать [2], в этом случае ваш адаптер может возвращать два разных представления. в getView() метод, то вам нужно сделать что-то вроде:

    if(list.get(position) instanceOf Card) return getCardView(...); else if(list.get(position) instanceOf Comment) return getCommentView(...);

  3. Рендеринг комментариев динамически в контейнер в представлении карты. Поэтому в вашем файле макета для представления вашей карты используйте ViewGroup, например LinearLayout, и присвойте ему уникальный идентификатор, например, "llComments". Есть отдельный файл макета для ваших комментариев. Затем в своем текущем коде вы можете надуть этот файл и просто добавить возвращенное представление в контейнер (llComments). Я думаю, что это решение, которое вы ищете. Итак, в вашем коде сделайте что-то вроде:

    View commentConvertView = inflater.inflate(R.layout.list_item_comment, ...); ViewGroup comments = (ViewGroup) convertView.findViewById(R.id.llComments); comments.removeAllView; for(list.get(position).getComments()){ //bind the data to commentConvertView comments.add(commentConvertView); }

[1] http://www.vogella.com/tutorials/AndroidListView/article.html[2] http://developer.android.com/reference/android/widget/BaseAdapter.html

Другие вопросы по тегам