RecycleView多次刷新或动态切换视图后,item位置发生偏移问题

许久没有做手机端APP了,许多控件功能特性和使用方式生疏了。近期在开发过程中遇到两个类似问题,这里记录一下。

1.RecycleView嵌套RecycleView,采用GridLayoutManager时,没多刷新一次,item位置都会发生偏移,间距越来越大。

2.RecycleView动态切换列表视图时,LinearLayoutManager 和 GridLayoutManager动态来回切换,item间距错乱

原因分析:

1.列表嵌套时,在主Adapter中给每个子列表设置GridLayoutManger间距addItemDecoration都是添加一个新的,就会跟之前设置的形成叠加,没刷新一次就会叠加一次,就会出现间距越来越大。

2.从GridLayoutManager切换成LinearLayoutManager时,会保留GridLayoutManager设置的addItemDecoration间距。所以会出现item发生偏移情况。

解决方法:

每次设置item间距或切换视图时,先移除之前设置的间距。

imageVideoHolder.rvSubList.setLayoutManager(new GridLayoutManager(mContext, 4));
//移除之前设置的间距
imageVideoHolder.rvSubList.removeItemDecoration(gridSpacingItemDecoration);
imageVideoHolder.rvSubList.addItemDecoration(gridSpacingItemDecoration);
 if(viewType == 0) {
            myViewBinding.rvFile.setLayoutManager(linearLayoutManager);
            //移除之前设置的间距
            myViewBinding.rvFile.removeItemDecoration(gridSpacingItemDecoration);
        }else {
            myViewBinding.rvFile.setLayoutManager(gridLayoutManager);
            //移除之前设置的间距
            myViewBinding.rvFile.removeItemDecoration(gridSpacingItemDecoration);
            myViewBinding.rvFile.addItemDecoration(gridSpacingItemDecoration);
        }

        mAdapter = new FileListAdapter(getContext(), new ArrayList<>());
        mAdapter.setViewType(viewType);
        mAdapter.setOnItemClickListener(myItemClickListener);
        myViewBinding.rvFile.setAdapter(mAdapter);
        mAdapter.refrsh(fileList);

猜你喜欢

转载自blog.csdn.net/HuanWen_Cheng/article/details/133640021
今日推荐