安卓瀑布流错乱 滑动闪烁 顶部留白 的解决方案

基本上网上给出的解决问题方案为:

  1. layoutManager.setGapStrategy(StaggeredGridLayoutManager.GAP_HANDLING_NONE)  
  2.  
    recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
        @Override
        public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
            super.onScrollStateChanged(recyclerView, newState);
            manager.invalidateSpanAssignments(); //防止第一行到顶部有空白区域
        }
    });

     

 

以上代码给LayoutManager和Recycleview设置之后的确可以解决部分问题,但是依然存在着顶部item留白错乱的问题,虽然在onScrollStateChanged中动态的去重新计算了高度 但是效果依然不尽人意。

其实在调用invalidateSpanAssignments的同时就决定了,只要是触摸滑动那么页面会进行重新测量绘制,因此导致在回到顶部 或者 滑动过程中依然有item的位置会变化 顶部有留白因此该方法不能调用

有人提出, 用IntentService中来写代码块,使用第三方图片加载框架例如Glide的asBitmap来预先获取图片的Bitmap同时将宽高保存赋予实体类,这种情况在后台不提供图片的宽高时,只有使用该方法,但是该方法的效率较低

实际上解决错乱与留白的问题 主要原因在于加载更多数据之后 使用的是 adapter.notifyDataSetChanged(); 该方法将刷新一整个Recycleview的数据 将 adapter.notifyDataSetChanged(); 替换成 notifyItemRangeInserted(int positionStart, int itemCount)进行新增数据底部局部刷新即可

废话这么多 解决办法就三步

1:layoutManager.setGapStrategy(StaggeredGridLayoutManager.GAP_HANDLING_NONE)  

2:根据图片宽高设置布局ImageView的LayoutParams

3:懒得去理这些适配器的问题就去https://github.com/CymChad/BaseRecyclerViewAdapterHelper 添加一个适配器依赖

在刷新数据时使用 adapter.setNewData(resultData);,加载更多数据时使用 adapter.addData(resultData);

 

 

 

 

你可能感兴趣的:(安卓瀑布流错乱 滑动闪烁 顶部留白 的解决方案)