20

RecyclerView wurde mit Android L eingeführt und ist Teil der AppCompat v7-Bibliothek. Ich entschied mich dann, meine App mit dieser brandneuen RecyclerView zu aktualisieren, um meine ListView s zu ersetzen. Dafür, wenn es darum geht, eine LayoutManager für die RecyclerView, verwende ich die LinearLayoutManager, die gut funktioniert.So implementieren Sie erweiterbare Elemente mit LinearLayoutManager (eingeführt mit Android L)

Hier ist das harte Zeug: wenn Ich möchte meine ExpandableListView in eine RecyclerView ändern. Da Google kein "" erstellt hat, ist das ziemlich schwierig und ich kann das nicht erreichen.

Die documentation erwähnt Kinder, aber es scheint Kinder der Stammansicht der RecyclerView nicht von Kindern selbst zu sein.

Hat jemand einen Workaround oder Hinweise? Oder zumindest einige Informationen wie wo ich anfangen soll, damit ich meine eigene LayoutManager implementieren kann.

+0

Möchten Sie eine benutzerdefinierte Ansicht erfordern, auf einem Arbeits jetzt aktualisieren wenn es abgeschlossen ist. – Flynn81

+0

Sicher, ich habe viele Male angefangen, aber es ist lota Arbeit und ich bin immer mit dem LayoutManager fest ... –

Antwort

1

Diese library hilft Ihnen, Ihre Artikel in "Abschnitte" zu gruppieren, und Sie können dann die Erweitern/Reduzieren-Funktionalität implementieren, die in diesem example folgt.

Zuerst Sie Ihre Sektion Klasse erstellen:

class MySection extends StatelessSection { 

    String header; 
    List<String> list; 
    boolean expanded = true; 

    public MySection(String header, List<String> list) { 
     // call constructor with layout resources for this Section header and items 
     super(R.layout.section_header, R.layout.section_item); 
     this.myHeader = header; 
     this.myList = list; 
    } 

    @Override 
    public int getContentItemsTotal() { 
     return expanded? list.size() : 0; 
    } 

    @Override 
    public RecyclerView.ViewHolder getHeaderViewHolder(View view) { 
     return new HeaderViewHolder(view); 
    } 

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

     headerHolder.tvTitle.setText(title); 

     headerHolder.rootView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       expanded = !expanded; 
       headerHolder.imgArrow.setImageResource(
         expanded ? R.drawable.ic_keyboard_arrow_up_black_18dp : R.drawable.ic_keyboard_arrow_down_black_18dp 
       ); 
       sectionAdapter.notifyDataSetChanged(); 
      } 
     }); 
    } 

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

Dann Instanz Ihrer Abschnitte erstellen und Adapter einrichten:

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

// Add your Sections 
sectionAdapter.addSection(new MySection("Section 1", Arrays.asList(new String[] {"Item 1", "Item 2", "Item 3", "Item 4" }))); 
sectionAdapter.addSection(new MySection("Section 2", Arrays.asList(new String[] {"Item 1", "Item 2" }))); 

// Set up your RecyclerView with the SectionedRecyclerViewAdapter 
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerview); 
recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); 
recyclerView.setAdapter(sectionAdapter);