2015-06-10 4 views
20

In meiner Anwendung verwende ich Recyclerview, um alle Kontaktliste anzuzeigen. Ich möchte zwei Abschnitte in Recyclerview.Fügen Sie zwei Abschnitte in Recyclerview Android

Wie ein Abschnitt ist meine Anwendung Kontaktliste und zweiten Abschnitt ist meine Telefon Kontaktliste.

Gefällt Ihnen dieses

enter image description here

Gibt es eine Methode, es zu tun?

Weiß jemand, wie man es macht?

+2

Können Sie bitte zeigen Sie Ihre Bemühungen oder mehr – Abhishek

+2

siehe http: // stackoverflow.com/Fragen/26245139/how-to-create-recyclerview-mit-multiple-view-type –

+1

Werfen Sie einen Blick auf dieser Antwort: http://stackoverflow.com/a/34464367/2739684 –

Antwort

11

Wenn Sie bereits eine RecyclerView haben, können Sie die Abschnitte einfach mit Gabriele Mariottis SimpleSectionedRecyclerViewAdapter implementieren.

ich fügen Sie seinem Beispiel:

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

Im gleichen Beispiel können Sie sagen, wie man diese cose in einem Fragment anwendet und wie man Daten in sCheeseStrings erhält. –

+0

Wie fügen Sie ein benutzerdefiniertes Layout für die Header hinzu? –

11

Wenn Sie nach einer Lösung suchen, der nicht fest codierten Header/Zeile Indizes verwendet werden muss, können Sie die Bibliothek SectionedRecyclerViewAdapter verwenden.

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

} 

Dann richten Sie das RecyclerView mit den Abschnitten:

zunächst eine Section-Klasse Gruppe Ihre Artikel erstellen

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

Sie können auch neue Zeilen zu Ihrem Abschnitte hinzuzufügen, ohne zu haben, neu berechnen Indizes:

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

Gibt es eine Möglichkeit, eine minimale Höhe für die Elementliste jedes Abschnitts festzulegen, so dass die Liste, wenn sie sehr kurz ist, noch eine Höhe hat, bevor der nächste Abschnitt beginnt? –

+0

Gibt es auch eine Möglichkeit, etwas anzuzeigen, wenn keine Inhaltselemente angezeigt werden? –

3

L Ich versuche, eine native Lösung vorzuschlagen.

Sie müssen eine Liste der Kontakte mit einer Fahne von isFavourite wie

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

sortieren das Array auf der Grundlage von isFavourite und contact like this

Pass, die auf Ihre ContactRecyclerAdapter Liste. Verwenden und zwei verschiedene Layouts für Kopf- und Artikel like this

0

Werfen Sie einen Blick auf meine Bibliothek auf Github, kann verwendet werden, leicht Abschnitte erstellen: RecyclerAdapter & Easy Section

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

Hoffe, es hilft.