Слияние нескольких RecyclerView.Adapter для использования с одним RecyclerView (Android)

У меня есть строка json, которую я разбиваю на 4 набора данных, каждый набор данных имеет собственный RecyclerView.Adapter.

Я хочу вывести все адаптеры в том же RecyclerView в идеале с StickyHeaders для каждого адаптера.

Я считаю, что это можно сделать с помощью ListViews через CWAC-merge CommonsWare ( https://github.com/commonsguy/cwac-merge )

Любые идеи относительно того, как это можно или нужно сделать с помощью RecyclerView? Я – изобретатель-разработчик, поэтому менее абстрактный ответ лучше; -D

Благодарю.

Я бы пошел за этой библиотекой: https://github.com/martijnvdwoude/recycler-view-merge-adapter

Проверьте документацию на странице Github на примерах использования этого кода.

Выдержка из readme:

RecyclerView myRecyclerView = (RecyclerView) view.findViewById(R.id.my_recycler_view); // Create new merge adapter RecyclerViewMergeAdapter mergeAdapter = new RecyclerViewMergeAdapter(); // Add any number of subadapters to merge adapter MyRecyclerViewSubAdapter subAdapter1 = new MyRecyclerViewSubAdapter(); MyRecyclerViewSubAdapter subAdapter2 = new MyRecyclerViewSubAdapter(); mergeAdapter.addAdapter(subAdapter1); mergeAdapter.addAdapter(subAdapter2); // Set merge adapter to RecyclerView myRecyclerView.setAdapter(mergeAdapter); 

Вы можете посмотреть на GroupAdapter

 GroupAdapter.Builder builder = new GroupAdapter.Builder(); builder.add(firstAdapter); builder.add(secondAdapter); GroupAdapter groupAdapter = builder.build(); recyclerView.setAdapter(groupAdapter); 

Вы достигаете этого только одним адаптером: SectionedRecyclerViewAdapter . С помощью этой библиотеки вы можете группировать свои элементы в разделы, и вы можете добавить к ним заголовки и / или нижние колонтитулы.

Сначала создайте класс Section для группировки ваших элементов:

 class MySection extends StatelessSection { String title; List<String> list; public MySection(String title, List<String> list) { // call constructor with layout resources for this Section header, footer and items super(R.layout.section_header, R.layout.section_item); this.title = title; this.list = list; } @Override public int getContentItemsTotal() { return list.size(); // number of items of this section } @Override public RecyclerView.ViewHolder getItemViewHolder(View view) { // return a custom instance of ViewHolder for the items of this section return new MyItemViewHolder(view); } @Override public void onBindItemViewHolder(RecyclerView.ViewHolder holder, int position) { MyItemViewHolder itemHolder = (MyItemViewHolder) holder; // bind your view here itemHolder.tvItem.setText(list.get(position)); } @Override public RecyclerView.ViewHolder getHeaderViewHolder(View view) { return new SimpleHeaderViewHolder(view); } @Override public void onBindHeaderViewHolder(RecyclerView.ViewHolder holder) { MyHeaderViewHolder headerHolder = (MyHeaderViewHolder) holder; // bind your header view here headerHolder.tvItem.setText(title); } public void addRow(String item) { this.list.add(item); } } 

Затем вы настраиваете RecyclerView с помощью разделов:

 // Create an instance of SectionedRecyclerViewAdapter SectionedRecyclerViewAdapter sectionAdapter = new SectionedRecyclerViewAdapter(); // Create your sections with the list of data MySection section1 = new MySection("Header of section 1", section1List); MySection section2 = new MySection("Header of section 2", section2List); // Add your Sections to the adapter sectionAdapter.addSection(section1); sectionAdapter.addSection(section2); // Set up your RecyclerView with the SectionedRecyclerViewAdapter RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerview); recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); recyclerView.setAdapter(sectionAdapter); 
Intereting Posts
Закрыть иерархию активности в Android Эквивалент ImageView scaleType 'centerCrop' для растровой растягивающей силы тяжести Как использовать один и тот же пользовательский шрифт для всех видов в Android? Как избежать утечки памяти в context.getSystemService (Context.CAMERA_SERVICE)? Как выделить выделенный элемент в ListView? Экспериментальная поддержка JUnit в Android + Kotlin не работает Android Textview Italic и wrap_contents Доступны ли API-карты Sky Map? Получить позицию зрения относительно самого верхнего родителя в android Зачем использовать службу android? Не удалось сгенерировать предпочтения, класс java / lang / AutoCloseable не найден в C: \ Program Files (x86) \ Android \ android-sdk \ platform \ android-19 \ android.jar Кинжал 2, супертип Инжектор равен нулю Активность просочилась ServiceConnection com.android.org.chromium.com.googlecode.eyesfree.braille.selfbraille.SelfBrailleClient $ Connection Как изменить динамический цвет нажатого цвета на другой цвет селектора? Обновление GUI: Runnables vs Messages