Страница 1 из 1
ExpandableListView с разными layout в childView
Добавлено: 07 окт 2014, 13:57
EspanaMia
Подскажите, как правильно реализовать ExpandableListView???
В случае, если используется везде один layout, то структура будет такая:
Код: Выделить всё
if (convertView == null) {
holder = new viewHolder();
convertView = inflater.inflate(R.layout.child_item, parent, false);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
но как быть, если у каждого groupPosition в childView используется разный layout ?
Re: ExpandableListView с разными layout в childView
Добавлено: 07 окт 2014, 19:59
Leeroy
del
Re: ExpandableListView с разными layout в childView
Добавлено: 08 окт 2014, 09:20
KamiSempai
Leeroy писал(а):Переопредели методы
public int getItemViewType(int position)
public int getViewTypeCount()
а в
Код: Выделить всё
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
// Choose the layout type
int viewType = getItemViewType(cursor.getPosition());
int layoutId = -1;
switch (viewType) {
case VIEW_TYPE_ONE: {
layoutId = R.layout.list_item_one;
break;
}
case VIEW_TYPE_TWO: {
layoutId = R.layout.list_item_two;
break;
}
}
View view = LayoutInflater.from(context).inflate(layoutId, parent, false);
ViewHolder viewHolder = new ViewHolder(view);
view.setTag(viewHolder);
return view;
}
Не получится. У ExpandableListAdapter нет таких методов. Нужно искать альтернативные библиотеки, так как ExpandableListView такой возможности не предоставляет.
Можно конечно не переиспользовать View и игнорировать convertView, создавая каждый раз новую, подходящую для текущей строки View. Но это больше из разряда вредных советов.
А еще можно самому вести учет View для переиспользования. У AbsListView есть слушатель RecyclerListener он срабатывает когда View отправляется в кучу для не используемых View. Но для реализации подобного нужно хорошо понимать как работает ListView. И еще мне не совсем понятно как поведет себя ListView если подсовывать ему View из его же списка ScrapViews.
Re: ExpandableListView с разными layout в childView
Добавлено: 10 окт 2014, 10:12
EspanaMia
Проблема решилась методами:
public int getChildType(final int groupPosition, final int childPosition)
public int getChildTypeCount()
спасибо.
Re: ExpandableListView с разными layout в childView
Добавлено: 11 окт 2014, 10:23
KamiSempai
EspanaMia писал(а):Проблема решилась методами:
public int getChildType(final int groupPosition, final int childPosition)
public int getChildTypeCount()
спасибо.
Хм. По началу удивился как так получилось, ведь у ExpandableListAdapter ДЕЙСТВИТЕЛЬНО нет таких методов. Оказывается есть еще один интерфейс HeterogeneousExpandableList в нем они есть и все реализации ExpandableListAdapter дополнительно реализуют HeterogeneousExpandableList. Такие дела.
Re: ExpandableListView с разными layout в childView
Добавлено: 11 окт 2014, 10:36
EspanaMia