2017-02-09 3 views
1

Ich möchte eine Liste von Elementen mit RecyclerView erstellen und möchten bestimmte Elemente erweitern, wenn Sie darauf klicken (wie in der Anrufliste). Ich möchte das erreichen, ohne eine Bibliothek zu benutzen. Kann jemand helfen ?Wie Recyclerview zu erstellen Erweiterbar ohne Verwendung von Drittanbieterbibliotheken

+0

Mit unserer Bibliothek können Sie es nicht tun, da Android bietet erweiterbare Recycler anzeigen .. hier ist ein gutes Tutorial für erweiterbare Recycler anzeigen https://www.bignerdranch.com/blog/expand-a-recyclerview-in-four-steps/ –

+0

@AbhishekSingh kannst du das ohne externe Bibliothek machen. siehe meine ans –

+0

@MilindMevada danke ich werde das versuchen. –

Antwort

1

Ruft die Kinddatenliste als Mitglied der übergeordneten Daten im Dataset ab. Und bei Click-Ereignis von RecyclerView Reihe, sie wie folgt verwenden .. hier mdataSet Haupt-Datensatz ist für RecyclerView

final TitleHolder holder = (TitleHolder) h; 
     final Model model = (Model) mdataSet.get(position); 

     holder.txt_title.setText(model.getTitle()); 
     holder.childItem = model; 

     holder.txt_title.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (model.getChildList() == null) { 
        //collapse 
        ((Model) mdataSet.get(mdataSet.indexOf(holder.childItem))).isExpanded = false; 
        holder.arrow.startAnimation(AnimationUtils.loadAnimation(context, R.anim.arrow_reverse)); 
        model.childList = new ArrayList<ModelData>(); 
        int count = 0; 
        int pos = mdataSet.indexOf(holder.childItem); 
        while (mdataSet.size() > pos + 1 && mdataSet.get(pos + 1).type == Model.VIEW_CHILD) { 
         model.childList.add((ModelData) mdataSet.remove(pos + 1)); 
         count++; 
        } 
        notifyItemRangeRemoved(pos + 1, count); 
       } else { 
        //expand 
        ((Model) mdataSet.get(mdataSet.indexOf(holder.childItem))).isExpanded = true; 
        holder.arrow.startAnimation(AnimationUtils.loadAnimation(context, R.anim.arrow)); 
        int pos = mdataSet.indexOf(holder.childItem); 
        int index = pos + 1; 
        for (ModelData i : model.getChildList()) { 
         mdataSet.add(index, i); 
         index++; 
        } 
        notifyItemRangeInserted(pos + 1, index - pos - 1); 
        model.childList = null; 

       } 

      } 
     }); 

     if (((Model) mdataSet.get(mdataSet.indexOf(holder.childItem))).isExpanded) { 
      holder.arrow.startAnimation(AnimationUtils.loadAnimation(context, R.anim.arrow)); 
     } 

Hier werde ich Kind Daten zur Daten-Set bei Click-Ereignis auf txt_title wieder hinzufügen, verwenden Title(parent) und data(child) als zwei verschiedene ViewTypes wie diese

@Override 
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

     if (viewType == VIEW_TITLE) { 
      View itemView = LayoutInflater.from(parent.getContext()) 
        .inflate(R.layout.list_expand_title, parent, false); 
      return new TitleHolder(itemView); 
     } else { 
      View itemView = LayoutInflater.from(parent.getContext()) 
        .inflate(R.layout.row_wallet_history, parent, false); 
      return new DataHolder(itemView); 
     } 
    } 

OR

Wenn Ihr Kind Ansicht fix ist (die Sie erweitern möchten/Kollaps) sie dann innerhalb Layout wickeln und dieses Layout sichtbar machen/Gone with Animation, um Einsturz Effekt zu erzielen erweitern Refere this link ihnen

zu machen animierte
+0

ja. Dies ist eine andere Möglichkeit, dies zu erreichen. Danke @AbhishekSingh für die Fusion meiner ans. Ich habe meinen anderen Beitrag gelöscht –

+0

das wird hilfreich für andere, die gleiche Frage suchen –

Verwandte Themen