2016-07-20 39 views
1

Ich verwende RecyclerView, die verschiedene Kategorien Liste anzeigt. Jedes Zeilenelement enthält außerdem RecyclerView, um die Liste der Kategorieelemente anzuzeigen. Parent RecyclerView ist mit vertial LinearLayoutManager gefüllt und Kind RecyclerViews sind mit (2 Spalten) bestückt. Kind RecyclerViews zeigt nicht alle Kategorieelemente außer den ersten 2 an, obwohl es viele Kategorieelemente gibt. Alle verbleibenden Kategorieelemente werden für bestimmte Kategorien ausgeblendet. Mit anderen Worten, Sie können sagen, dass das Kind RecyclerView nicht so weit expandiert wie die Elemente, die es enthält.Android RecyclerView in RecyclerView?

Ich fand hier andere Lösung, aber niemand hat funktioniert. Deshalb nochmal posten.

+0

Sie benötigen nur einen Recycler verwenden Aussicht. Stellen Sie mehr Code des Bildes mit Ergebnis zur Verfügung und ich versuche, mehr zu erklären –

+0

Selbst wenn Sie eine geschachtelte recyclerview haben konnten, waren Sie nicht in der Lage, es ohne etwas zusätzliche Arbeit zu scrollen. –

+1

Sie können RecyclerViews verschachtelt haben (blies meine Meinung, als ich das hörte) ... aber dieses Problem kann nicht gelöst werden, ohne Code zu teilen. – Booger

Antwort

1

Sie können es einfach mit nur einem RecyclerView unter Verwendung dieses library erreichen. Siehe das Bild unten:

enter image description here

zunächst eine Section-Klasse erstellen:

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 MyHeaderViewHolder(view); 
    } 

    @Override 
    public void onBindHeaderViewHolder(RecyclerView.ViewHolder holder) { 
     MyHeaderViewHolder headerHolder = (MyHeaderViewHolder) holder; 

     // bind your header view here 
     headerHolder.tvItem.setText(title); 
    } 
} 

Dann stellen Sie die RecyclerView mit Sections:

// Create an instance of SectionedRecyclerViewAdapter 
SectionedRecyclerViewAdapter sectionAdapter = new SectionedRecyclerViewAdapter(); 

// Create your sections with the list of data for each year 
MySection section1 = new MySection("Categories 1", categories1DataList); 
MySection section2 = new MySection("Categories 2", categories2DataList); 

// Add your Sections to the adapter 
sectionAdapter.addSection(section1); 
sectionAdapter.addSection(section2); 

// Set up your RecyclerView with the SectionedRecyclerViewAdapter 
GridLayoutManager glm = new GridLayoutManager(getContext(), 2); 
glm.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { 
    @Override 
    public int getSpanSize(int position) { 
     switch(sectionAdapter.getSectionItemViewType(position)) { 
      case SectionedRecyclerViewAdapter.VIEW_TYPE_HEADER: 
       return 2; 
      default: 
       return 1; 
     } 
    } 
}); 
recyclerView.setLayoutManager(glm); 
recyclerView.setAdapter(sectionAdapter); 
+0

Ich benutzte diese Bibliothek und es funktionierte großartig, aber ein bisschen ruckelnd. Jetzt möchte ich mehr laden (wollen mehr Datensätze von Server laden) Funktionalität zu dieser Recyclerview Liste. Wie kann ich es reibungslos machen und Paginierung erreichen? – momersaleem

+0

1) Erstellen Sie die "addItem" -Methode in Ihrer MySection-Klasse, um neue Elemente zu Ihrer Liste hinzuzufügen; 2) Hinzufügen von Elementen zu Ihrer Sektion mit der "addItem" -Methode; 3) rufe notifyDataSetChanged von sectionAdapter auf; – Gustavo

+0

Ich habe nicht darum gebeten. Ich wollte wissen, wie soll ich wissen, dass meine Liste unten auf Scroll erreicht hat, so dass ich eine API aufrufen kann, um die nächste Seite Datensätze vom Server zu holen? Ich weiß, wie man neue Einträge in der Liste hinzufügt. Könntest du mir bitte auch helfen es glatt zu machen weil es ein bisschen ruckelt. – momersaleem