En mi aplicación que estoy utilizando recyclerview para mostrar toda la lista de contactos.
Quiero dos de la sección en recyclerview.

Como una sección es de mi solicitud de la lista de contactos y la segunda sección es mi lista de contactos del teléfono.

Como este

Agregar dos secciones en recyclerview android

¿Hay algún método para hacerlo?

¿Alguien sabe cómo hacerlo?

InformationsquelleAutor Kinjal | 2015-06-10

5 Comentarios

  1. 16

    Si usted ya tiene un RecyclerView, una manera fácil de implementar las secciones es el uso de Gabriele Mariotti del SimpleSectionedRecyclerViewAdapter.

    Me pegue su ejemplo:

    //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);
    • En el mismo ejemplo se puede saber cómo aplicar este cose en un fragmento, y cómo getdata en sCheeseStrings.
    • ¿cómo agregar un diseño personalizado para los encabezados?
    • ¿Qué acerca de la dinámica de datos?
  2. 12

    Si usted está buscando una solución que no necesita usar codificado encabezado de fila o índices, usted puede usar la biblioteca SectionedRecyclerViewAdapter.

    Crear en primer lugar una Sección de la clase para agrupar sus artículos:

    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);
        }
    
    }

    A continuación, configurar el RecyclerView con sus Secciones:

    //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);

    Usted puede también agregar nuevas filas a sus secciones sin tener que volver a calcular los índices:

    favoritesSection.addRow("new item");
    sectionAdapter.notifyDataSetChanged();
    • Es allí una manera de establecer una altura mínima para la lista de artículos de cada sección, que si la lista es muy corta, todavía tiene algo de altura antes de la siguiente sección comienza?
    • También, hay una manera de mostrar algo cuando no hay elementos de contenido para mostrar?
  3. 4

    Permítanme proponer una solución nativa.

    Debe tener un lista de Contactos con una bandera de isFavourite como

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

    ordenar que la matriz en la base de isFavourite y contactName como este

    pase de lista a su ContactRecyclerAdapter. y el Uso de dos diferentes diseños de Encabezado y Elementos así

  4. 0

    Echar un vistazo a mi biblioteca en Github, puede ser usada fácilmente para crear secciones:
    RecyclerAdapter & Fácil de Sección

    mRecylerView.setLayoutManager(...);
    /*create Adapter*/
    RecyclerAdapter<Customer> baseAdapter = new RecyclerAdapter<>(...);
    /*create sectioned adapter. the Adapter type can be RecyclerView.Adapter*/
    SectionedAdapter<String, RecyclerAdapter> adapter = new SectionedAdapter<>(SectionViewHolder.class, baseAdapter);
    /*add your sections*/
    sectionAdapter.addSection(0/*position*/, "Title Section 1");
    /*attach Adapter to RecyclerView*/
    mRecylerView.setAdapter(sectionAdapter);

    Espero que ayude.

Dejar respuesta

Please enter your comment!
Please enter your name here