2017-02-09 69 views
1

我想使用RecyclerView創建項目列表,並希望在點擊時展開特定項目(如在電話列表中)。我想在不使用任何庫的情況下實現這一目標。誰能幫忙?如何使recyclerview可擴展而不使用第三方庫

+0

與我的圖書館,你不能這樣做,因爲Android確實提供可擴展的回收站視圖..這裏是可擴展的回收站視圖的好教程https://www.bignerdranch.com/blog/expand-a-recyclerview-in-four-steps/ –

+0

@AbhishekSingh你可以做到這一點,沒有外部圖書館。看到我的回答 –

+0

@MilindMevada謝謝,我會嘗試。 –

回答

1

獲取子數據列表作爲數據集中父數據的成員。 而且,在RecyclerView行的單擊事件,在這裏使用他們這樣的.. mdataSet是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)); 
     } 

這裏主要的數據集,我的孩子在數據click事件上txt_title 添加到主數據集再次,使用Title(parent)data(child)作爲兩個不同的ViewTypes這樣

@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

如果你的孩子的看法是修復(要展開/摺疊),然後將它們包裝內部佈局,並作出這樣的佈局可見/以達到擴大崩塌效應 參考,this link使動畫走了他們的動畫

+0

是的。這是實現這一目標的另一種方式。感謝@AbhishekSingh合併我的答案。我刪除了我的其他帖子 –

+0

這將有助於其他人搜索同一問題 –