Подтвердить что ты не робот

Группировать похожие строки в listview на основе их содержимого

У меня есть список, который отображает набор строк, каждая строка является интерактивной. теперь, я хочу группировать аналогичный тип строк под одним заголовком, как показано на рисунке (издевается). может кто-то, пожалуйста, посоветуйте или обеспечите подход для этого. mockup image

4b9b3361

Ответ 1

Добавьте дополнительный пареметр для "категории" каждого элемента списка. Затем реализуйте что-то вроде "StickyListHeaders" на основе этого параметра.

Ответ 2

Я использовал AmazingListView в прошлом с некоторой эффективностью.
Это реализация предлагаемого подхода Google I/O Schedule App.

Вещи, которые мне нравятся:

  • Липкие заголовки
  • Пагинация с ленивой загрузкой

Примечание:

  • Это проект на основе SVN
  • Вам нужно включить его в качестве библиотеки
  • Сложнее использовать его с Android Studio; гораздо проще с ADT.

(Я только что опубликовал вопрос об этом в последнее время)

Здесь изображение с главной страницы проекта: AmazingListView example lists

Ответ 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);
        }
    }

}