Как динамически создать макет XML несколько раз в методе getview() в Android?
Я уже создал xml-layout
файл, который содержит View
как поле для комментариев. Я хочу создать динамически макет (поле для комментариев) несколько раз внутри getView()
метод. Как я могу создать его динамически внутри getView()
метод?
Здесь внутри getview()
Метод, который я использовал код для динамического генерирования конкретного View
несколько раз, но это не работает. Пожалуйста, дайте мне предложение.
Ссылка на код моего адаптера ниже:
1 ответ
Я вижу три подхода для вас. Как обсуждалось в комментариях, заголовок вашего вопроса вводит в заблуждение, поэтому я предполагаю, что:
- у вас есть список карт, которые вы хотите отобразить
- каждая карта может иметь список комментариев
Таким образом, основная проблема заключается в том, что у вас есть двумерная структура данных, которую вы хотите отобразить с использованием одномерного компонента пользовательского интерфейса, в вашем случае ListView.
Вы можете решить свою проблему:
Использование ExpandableListView, где карточки являются родителями, а комментарии являются дочерними элементами. См. [1] для примера.
Выровняйте свою иерархию данных. Таким образом, у вас есть только список элементов, где карточки как-то рассматриваются как "заголовки" или "разделители" для ваших комментариев. Вам нужно перезаписать [2], в этом случае ваш адаптер может возвращать два разных представления. в
getView()
метод, то вам нужно сделать что-то вроде:if(list.get(position) instanceOf Card) return getCardView(...); else if(list.get(position) instanceOf Comment) return getCommentView(...);
Рендеринг комментариев динамически в контейнер в представлении карты. Поэтому в вашем файле макета для представления вашей карты используйте 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