У меня есть список, который отображает набор строк, каждая строка является интерактивной. теперь, я хочу группировать аналогичный тип строк под одним заголовком, как показано на рисунке (издевается). может кто-то, пожалуйста, посоветуйте или обеспечите подход для этого.
Группировать похожие строки в listview на основе их содержимого
Ответ 1
Добавьте дополнительный пареметр для "категории" каждого элемента списка. Затем реализуйте что-то вроде "StickyListHeaders" на основе этого параметра.
Ответ 2
Я использовал AmazingListView в прошлом с некоторой эффективностью.
Это реализация предлагаемого подхода Google I/O Schedule App.
Вещи, которые мне нравятся:
- Липкие заголовки
- Пагинация с ленивой загрузкой
Примечание:
- Это проект на основе SVN
- Вам нужно включить его в качестве библиотеки
- Сложнее использовать его с Android Studio; гораздо проще с ADT.
(Я только что опубликовал вопрос об этом в последнее время)
Здесь изображение с главной страницы проекта:
Ответ 3
Если ваш адаптер основан на курсорах, используйте SectionCursorAdapter 2.0, вы не можете упростить:
public class MyAdapter extends SectionCursorAdapter<String, MyAdapter.SectionViewHolder, MyAdapter.ItemViewHolder> {
public MyAdapter(Context context, Cursor cursor) {
super(context, cursor, 0, R.layout.item_section, R.layout.item_title);
}
// this method will fullfill your wishes
@Override protected String getSectionFromCursor(Cursor cursor) {
return cursor.getString(cursor.getColumnIndexOrThrow("group"));
}
// replace getView/bindView/newView
// --------------------------------------------
@Override protected SectionViewHolder createSectionViewHolder(View sectionView, String section) {
return new SectionViewHolder(sectionView);
}
@Override protected ItemViewHolder createItemViewHolder(Cursor cursor, View itemView) {
return new ItemViewHolder(itemView);
}
@Override protected void bindSectionViewHolder(int position, SectionViewHolder sectionViewHolder, ViewGroup parent, String section) {
sectionViewHolder.titleView.setText(section);
}
@Override protected void bindItemViewHolder(ItemViewHolder itemViewHolder, Cursor cursor, ViewGroup parent) {
itemViewHolder.title = cursor.getString(cursor.getColumnIndexOrThrow("title"));
itemViewHolder.titleView.setText(itemViewHolder.text);
}
// view holders
// --------------------------------------------
public class SectionViewHolder extends ViewHolder {
public TextView titleView;
public SectionViewHolder(View rootView) {
super(rootView);
titleView = findWidgetById(R.id.sectionText);
}
}
public class ItemViewHolder extends ViewHolder {
public String title;
public TextView titleView;
public ItemViewHolder(View rootView) {
super(rootView);
titleView = findWidgetById(R.id.titleText);
}
}
}