许久没有做手机端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);