-
EspanaMia
- Сообщения: 24
- Зарегистрирован: 10 янв 2014, 11:03
Сообщение
EspanaMia » 07 окт 2014, 13:57
Подскажите, как правильно реализовать 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 ?
-
Leeroy
- Сообщения: 67
- Зарегистрирован: 12 дек 2013, 21:25
Сообщение
Leeroy » 07 окт 2014, 19:59
Переопредели методы
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;
}
Java Core -> JDBC -> GoF -> Android SDK ->...
Телепрограмма в твоем смарте
Телепрограмма
-
KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Сообщение
KamiSempai » 08 окт 2014, 09:20
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.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
-
EspanaMia
- Сообщения: 24
- Зарегистрирован: 10 янв 2014, 11:03
Сообщение
EspanaMia » 10 окт 2014, 10:12
Проблема решилась методами:
public int getChildType(final int groupPosition, final int childPosition)
public int getChildTypeCount()
спасибо.
-
KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Сообщение
KamiSempai » 11 окт 2014, 10:23
EspanaMia писал(а):Проблема решилась методами:
public int getChildType(final int groupPosition, final int childPosition)
public int getChildTypeCount()
спасибо.
Хм. По началу удивился как так получилось, ведь у ExpandableListAdapter ДЕЙСТВИТЕЛЬНО нет таких методов. Оказывается есть еще один интерфейс HeterogeneousExpandableList в нем они есть и все реализации ExpandableListAdapter дополнительно реализуют HeterogeneousExpandableList. Такие дела.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.