RecyclerView套嵌RecyclerView,解决上拉刷新加载更多,卡顿问题

1 、RecyclerView套嵌RecyclerView,上拉加载数据太多导致数据处理耗时卡顿

因为了外面RecyclerView在加载更多的时候会刷新列表,而里面的RecyclerView相当于外面RecyclerView的一个item,每次调用notifyDataSetChanged的时候,会导致里面的RecyclerView的适配器,将所有数据都会重新onCreateViewHolder和onBindViewHolder一遍,导致往后加载更多次数越多,就会卡顿。如下处理,加载更多的时候,对里面的RecyclerView进行局部刷新,很好解决卡顿问题。

private RecyclerView recyclerView;
private OutAdapter;
private List<Entry> mEntitys;
private int positionStart = 0;
private int itemCount = 0;

public MyOutAdapter(){
     mEntitys = new ArrayList<>();   
}

public void addItem( List<Entry> addEntitys){
    positionStart = mEntitys.size();
    itemCount =  addEntitys.size(); 
    mEntitys.addAll(addEntitys);
}

public void onBindViewHolder(Context context, ViewHolder viewHolder, int i) {
        
        if (null == outAdapter) {
            recyclerView= viewHolder.getView(R.id.recyclerView);
            outAdapter= new OutAdapter(mContext);
            outAdapter.setEntitys(mEntitys);
            recyclerView.setHasFixedSize(true);
            recyclerView.setNestedScrollingEnabled(false);
            recyclerView.setFocusableInTouchMode(false);
            recyclerView.requestFocus();
            final StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
            recyclerView.setLayoutManager(staggeredGridLayoutManager);
            recyclerView.setAdapter(outAdapter);

        } else {
           //positionStart需要局部刷新的数据列表开始位置,itemCount需要刷新个数
           outAdapter.notifyItemRangeChanged(positionStart, itemCount);
        }
    }

2、如下设置也可以解决套嵌事件处理冲突卡顿

            recyclerView.setHasFixedSize(true);
            recyclerView.setNestedScrollingEnabled(false);
            recyclerView.setFocusableInTouchMode(false);
            recyclerView.requestFocus();

3、如果一个RecyclerView能解决的布局,最好还是不要使用RecyclerView套嵌RecyclerView

     

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值