2017-08-25 84 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。