Как показать все элементы списка в дочернем ListView с помощью jar cwac-merge-1.0.4

Я использую два ListView на одном экране. Из-за использования двух Listviews, вероятно, Parent ListView и Child ListView, этот класс Child ListView Adapter не отображает все значения списка в Child ListView. Он показал только позицию 0 th(first) в Child ListView, для этой проблемы выше у меня есть использовал код ответа из этой просмотра списка Android внутри ссылки прокрутки .Теперь я могу видеть все значения списка в моем Child ListView, но он не показывает все мои значения списка одновременно, которые я взял из Web service call. Он показал первое значение только в списке, потому что высота представления списка была установлена ​​на высоту одного элемента списка. Если я прокручиваю дочерний ListView вниз, я могу видеть все значения в ListView. Что мне нужно, это если я получаю пять значений списка от веб-службы, он должен отображать все пять элементов одновременно.

примечание: если я установил жестко запрограммированные значения для списка, он отобразил все элементы в дочернем ListView одновременно.

Отредактировано

Как я этого добился с помощью MergeAdapter

Этот метод createAdapter вернет объект Adapter, и я установил этот адаптер в свой список с помощью setAdapter(createAdapter(new ArrayList<T>()))

 private ListAdapter createAdapter(List<T> items) {

        mergeAdapter = new MergeAdapter();
        mergeAdapter.addAdapter(endlessFeedAdapter);       

        return  mergeAdapter;
    }

Мне нужно

Мне предложили использовать ExpandableListView вместо two ListViews. Если я использую ExpandableListView, мне придется изменить тип возвращаемого значения метода createAdapter на ExpandableListAdapter, для этого я использовал приведенный ниже код.

 private ExpandableListAdapter createAdapter(List<T> items) {

            mergeAdapter = new MergeAdapter();
            mergeAdapter.addAdapter(endlessFeedAdapter);       

            return (ExpandableListAdapter) mergeAdapter;
        }

но он показал следующее Excaption

Caused by: java.lang.ClassCastException: com.commonsware.cwac.merge.MergeAdapter cannot be cast to android.widget.ExpandableListAdapter Значения из веб-службы

введите описание изображения здесь введите описание изображения здесь

Жестко закодированные значения

введите описание изображения здесь


person Jamal    schedule 18.12.2014    source источник
comment
Если я правильно понимаю вашу настройку, я думаю, вам следует использовать ExpandableListView вместо того, чтобы пытаться вкладывать ListViews.   -  person Mike M.    schedule 18.12.2014
comment
Я выполнил все свои необходимые вещи, используя эти два ListViews. Если я перейду на ExpandableListView, это займет больше времени для реализации. С моей точки зрения, любые небольшие изменения в коде исправят это.   -  person Jamal    schedule 18.12.2014
comment
Вы сражаетесь с трудным бойцом. Встраивание двух ListView вместе не работает с Android. Это большое нет-нет. Вы должны использовать ExpandableListView. Кроме того, когда вы встраиваете адаптер в другой адаптер, это сильно снижает производительность. Миграция может быть болезненной, но это правильный путь. В противном случае вы просто продолжите взламывать код, чтобы заставить работать что-то, что не предназначено для такой работы.   -  person Jay Soyer    schedule 19.12.2014
comment
Просто удалите весь этот код, который вы сделали, и начните с нуля с любого учебника из Интернета, например. coderzheaven.com/   -  person Divers    schedule 02.01.2015
comment
Приношу свои извинения за то, что не ответил на это раньше - я не получил уведомление по электронной почте. Я согласен с приведенными выше комментариями, что наличие ListView внутри ListView вряд ли сработает. Что касается вашего ClassCastException, MergeAdapter не является ExpandableListAdapter. Вам нужно будет реализовать свой собственный ExpandableListAdapter - см. этот проект для примера этого.   -  person CommonsWare    schedule 03.01.2015
comment
Получив данные из вызова веб-службы, рассчитайте количество строк, которые вам нужны, и программно установите высоту дочернего ListView, равную количеству строк * высоте одной строки. Я могу дать вам образец кода, если это будет полезно.   -  person varsha-venkatesh    schedule 06.01.2015


Ответы (1)


Что вам мешает сделать 2 разных адаптера и добавить их в MergeAdapter? Вы можете добавить несколько адаптеров в MergeAdapter и несколько представлений. В этом случае нет необходимости использовать 2 Listviews.

mergeAdapter.addAdapter(adapterHeading);
mergeAdapter.addView(someView);
mergeAdapter.addAdapter(adapterFooter);
listView.setAdapter(mergeAdapter);
person Mikelis Kaneps    schedule 08.01.2015