Добавьте два раздела в андроид recyclerview

В моем приложении я использую recyclerview для отображения всех списков контактов. Я хочу два раздела в recyclerview.

Как и в одном разделе, мой список контактов для контактов и второй раздел – это мой список контактов со мной.

Как это

Введите описание изображения здесь

Есть ли способ сделать это?

Кто-нибудь знает, как это сделать?

Если у вас уже есть RecyclerView , простой способ реализовать разделы – использовать SimpleSectionedRecyclerViewAdapter от Gabriele Mariotti.

Я вставляю вам свой пример:

 //Your RecyclerView mRecyclerView = (RecyclerView) findViewById(R.id.list); mRecyclerView.setHasFixedSize(true); mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); mRecyclerView.addItemDecoration(new DividerItemDecoration(this,LinearLayoutManager.VERTICAL)); //Your RecyclerView.Adapter mAdapter = new SimpleAdapter(this,sCheeseStrings); //This is the code to provide a sectioned list List<SimpleSectionedRecyclerViewAdapter.Section> sections = new ArrayList<SimpleSectionedRecyclerViewAdapter.Section>(); //Sections sections.add(new SimpleSectionedRecyclerViewAdapter.Section(0,"Section 1")); sections.add(new SimpleSectionedRecyclerViewAdapter.Section(5,"Section 2")); sections.add(new SimpleSectionedRecyclerViewAdapter.Section(12,"Section 3")); sections.add(new SimpleSectionedRecyclerViewAdapter.Section(14,"Section 4")); sections.add(new SimpleSectionedRecyclerViewAdapter.Section(20,"Section 5")); //Add your adapter to the sectionAdapter SimpleSectionedRecyclerViewAdapter.Section[] dummy = new SimpleSectionedRecyclerViewAdapter.Section[sections.size()]; SimpleSectionedRecyclerViewAdapter mSectionedAdapter = new SimpleSectionedRecyclerViewAdapter(this,R.layout.section,R.id.section_text,mAdapter); mSectionedAdapter.setSections(sections.toArray(dummy)); //Apply this adapter to the RecyclerView mRecyclerView.setAdapter(mSectionedAdapter); 

Если вы ищете решение, не требующее жестких индексов заголовка / строки, вы можете использовать библиотеку 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 favoritesSection = new MySection("Favorites", favoritesList); MySection contactsSection = new MySection("Add Favorites", contactsList); // Add your Sections to the adapter sectionAdapter.addSection(favoritesSection); sectionAdapter.addSection(contactsSection); // Set up your RecyclerView with the SectionedRecyclerViewAdapter RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerview); recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); recyclerView.setAdapter(sectionAdapter); 

Вы также можете добавлять новые строки в свои разделы без необходимости пересчета индексов:

 favoritesSection.addRow("new item"); sectionAdapter.notifyDataSetChanged(); 

Позвольте мне попытаться предложить собственное решение.

У вас должен быть список контактов с флагом isFavourite, например

 private class Contacts{ private String name; private String phoneNumber; private boolean isFavourite; } 

Сортируйте этот массив на основе isFavourite и contactName, как это

Передайте этот список вашему ContactRecyclerAdapter. И используйте два разных макета для заголовка и элементов, подобных этому

В вашем адаптере getItemViewType Layout, как это ….

 @Override public int getItemViewType(int position) { if (mCountriesModelList.get(position).isSection) { return SECTION_VIEW; } else { return CONTENT_VIEW; } } 

https://github.com/sayanmanna/LetterSectionedRecyclerView