2017-08-25 83 views
0

假設我有2項RecyclerView,其中每個項目都有一個innerrecyclerview其中大約有100 項目它都是垂直或任何不具有任何對存在的問題影響。如何在vertical recyclerview android中實現Vertical Recyclerview?

我已經在其他stackoverflow問題或其他安卓博客上實現了可用的方法,但沒有幫助。

我有一個關於onbindviewholder一個問題,在第1項內RecyclerViewonbindviewholder被調用的所有元素即100一次,他們不是回收或任何東西作爲onbindviewholder不與滾動應該得到調用正常行爲RecyclerView

如何使innerrecyclerview回收,因爲所有其他帖子都沒有談到這一點。

CourseRVAdapter或ParentAdapter

public class CourseRVAdapter extends RecyclerView.Adapter<CourseRVAdapter.SimpleViewHolder> { 

     private Context mContext; 
     private List<data> merchantlist; 
     private List<data> merchantlist2; 
     private RecyclerView horizontalList; 
     Typeface MRR; 
     private Typeface MR; 


     public class SimpleViewHolder extends RecyclerView.ViewHolder { 
      public final TextView title; 
      private HorizontalRVAdapter horizontalAdapter; 

      public SimpleViewHolder(View view) { 
       super(view); 
       Context context = itemView.getContext(); 
       title = (TextView) view.findViewById(R.id.text_1); 
       horizontalList = (RecyclerView) itemView.findViewById(R.id.my_recycler_view); 
       horizontalList.setLayoutManager(new CustomLinearLayoutManager(mContext, 3)); 
       horizontalAdapter = new HorizontalRVAdapter(merchantlist, mContext, MR); 
       horizontalList.setAdapter(horizontalAdapter); 
      } 
     } 



     CourseRVAdapter(List<data> merchantlist2, Context mContext, Typeface MRR, List<data> merchantlist, Typeface MR) { 

      this.merchantlist2 = merchantlist2; 
      this.merchantlist = merchantlist; 
      this.mContext = mContext; 
      this.MRR = MRR; 
      this.MR = MR; 

     } 
     public SimpleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
      final View view = LayoutInflater.from(mContext).inflate(R.layout.merchant_list_header, parent, false); 
      return new SimpleViewHolder(view); 
     } 

     @Override 
     public void onBindViewHolder(SimpleViewHolder holder, final int position) { 



     } 

     @Override 
     public int getItemCount() { 

      return merchantlist2.size(); 
     } 

    } 

Horizo​​ntalRVAdapter或Inneradapter

public class HorizontalRVAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { 

      List<data> merchantlist; 
      FragmentActivity main; 
      Context mContext; 
      Typeface MRR; 

      public HorizontalRVAdapter(List<data> merchantlist, Context mContext, Typeface MRR) { 

       this.merchantlist = merchantlist; 
       this.mContext = mContext; 
       this.MRR = MRR; 

      } 

      private class ItemViewHolder extends RecyclerView.ViewHolder { 

       private TextView merchantname; 

       public ItemViewHolder(View itemView) { 
        super(itemView); 
        merchantname = (TextView) itemView.findViewById(R.id.merchant_name); 
       } 
      } 

      @Override 
      public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
       Context context = parent.getContext(); 
       View itemView = LayoutInflater.from(context).inflate(R.layout.merchant_list_item, parent, false); 
       ItemViewHolder holder = new ItemViewHolder(itemView); 
       return holder; 
      } 

      @Override 
      public void onBindViewHolder(RecyclerView.ViewHolder rawHolder, int position) { 

       ItemViewHolder holder = (ItemViewHolder) rawHolder; 
       data list = merchantlist.get(position); 
       holder.merchantname.setText(list.merchantname); 
       holder.itemView.setTag(position); 

       Log.d("TAG", "onbindviewholder -- > " + position); 
      } 

      @Override 
      public int getItemCount() { 
       return merchantlist.size(); 
      } 

     } 

我還沒有添加我有多填充數據兩者的recyclerview

例如parentrecyclerview有1個或2個項目和innerrecyclerview有100個項目。

編輯:

因此讓第一個註釋後,我更新了我想acheive得到更好的反應。

我有一個兩個textview和一個Gridrecyclerview,我希望兩個textview滾動時,我滾動gridrecyclerview。我想出了通過爲這兩個文本視圖和網格項目的簡單物品定義標題來實現這一點的想法。

然後,我不得不設置Gridlayoutmanager與跨度,但它也包括前兩個文本,我結束了兩個文本視圖在該網格也是不需要的。 The blue one is the one item of the oarentrecyclerview and the icon and text are the item for insiderecyclerview i want them to scroll in cohesion

+1

爲什麼你需要嵌套'RecyclerView's?這樣做是不好的做法。也許你需要的是不同的東西。如果你想添加你需要的人,這裏可能會指出你正確的方向。 – Abbas

+0

@Abbas它不是一個不好的做法googleplay Android應用程序是在他們的主屏幕與verticalrecyclerview內的horizo​​ntalrecyclerview。我編輯我的問題 –

+0

那麼首先沒有辦法知道他們是否在垂直RecyclerView內有多個水平的RecyclerView。可以很容易地成爲一個很好的舊的ScrollView。其次,這是一個壞主意,因爲嵌套的RecyclerViews可能導致內存泄漏。照片上的變化會更好。 – Abbas

回答

1

所以這個問題是有垂直RecyclerView另一垂直RecyclerView內。 OP的問題是在滾動嵌套RecyclerView的項目時未調用onBindView()

原因很簡單:嵌套的RecyclerView正在繪製其所有的 Views,因爲它的父節點RecyclerView擁有無限可用空間。


問題通過使用GridLayoutManager與跨度查詢(詳見本SO answer),可以除去需要使用嵌套RecyclerView小號解決了OP。