嵌套的Recyclerview问题

时间:2018-08-23 23:36:12

标签: android android-recyclerview

我有一个与父母RecyclerView和他的孩子在一起的片段(孩子是内部Recyclerview)。当我滚动到底部(最后一个数据),然后再次滚动到顶部时,我发现了问题。数据之一丢失。当我尝试再次滚动到底部并滚动到顶部时,数据是随机的。有人可以帮助我吗?

HomeFragment

    GridLayoutManager gl = new GridLayoutManager(getContext(), 1, 
    GridLayoutManager.VERTICAL, false);
    ParentAdapter adapter = new ParentAdapter(getContext(), parentList);
    rcvParent.setAdapter(adapter);

OnBindViewHolder

    holder.title.setText(parentList.get(position).getTitle());
    if (parentList.get(position).getProducts() != null) {
        for (ProductModel pm : parentList.get(position).getProducts()) {
            productList.add(pm);
        }
        GridLayoutManager childLayout = new GridLayoutManager(mContext, 1, GridLayoutManager.HORIZONTAL, false);
        holder.childRecyclerView.setLayoutManager(childLayout);
        ChildAdapter ca = new ChildAdapter(mContext, productList);
        holder.childRecyclerView.setAdapter(ca);
    } else {
        holder.childRecyclerView.setVisibility(View.GONE);
    }

屏幕截图

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:0)

当您滚动到底部并再次滚动到顶部时。 OnBindViewHolder方法调用, 因此内部的Recyclerview会再次设置适配器。

最好将NestedScrollView用作fragment的父级,而不要使用RecyclerView

您可能会遇到滚动时recyclerview速度慢的问题。使用此代码来解决它并提高性能。

 recycleview.setNestedScrollingEnabled(false);
 ViewCompat.setNestedScrollingEnabled(recycleview, false);
 recycleview.setHasFixedSize(true);
 recycleview.setItemViewCacheSize(20);
 recycleview.setDrawingCacheEnabled(true);
 recycleview.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);

现在,您应该使用片段OnBindViewHolderonCreateView方法中的代码来设置内部recyclerView的适配器

告诉我您是否有问题