2014-12-02 1 views
1

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

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

Мой адаптер код ссылки ниже:

http://pastebin.com/aAYdPbn9

+0

Вы не можете создать XML макет из кода ... но вы можете создать Мнения код ... в любом случае вопрос неясен – Selvin

+0

У меня есть один макет в XML-файле, который выглядит как поле комментариев. Я хочу создать этот блок комментариев несколько раз динамически. – Malay

+0

Настоящие программисты не используют термин: 'it does not work' ... – Selvin

ответ

2

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

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

Так основная проблема в том, что у вас есть двумерную структуру данных, который вы хотите отобразить с помощью одномерный компонент пользовательского интерфейса, в вашем случае с 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#expandablelistview_concept [2] http://developer.android.com/reference/android/widget/BaseAdapter.html#getViewTypeCount()

+0

Спасибо, что дали ответ. может у вас есть ссылка на код или демо? Я действительно хочу попробовать этот подход ... – Malay

+1

Есть много учебников, которые демонстрируют правильное использование адаптеров. Если вы можете немного подчеркнуть то, чего хотите достичь, я могу расширить свой ответ примером для вашего дела. В противном случае этот блог показывает один простой пример: http://androidadapternotifiydatasetchanged.blogspot.de – a11n

+0

Не могли бы вы рассказать об этом? если вы понимаете мое кодирование и что я хочу делать? – Malay

 Смежные вопросы

  • Нет связанных вопросов^_^