Слияние нескольких 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);