CoordinatorLayout嵌套RecyclerView时加脚布局,频繁设置数据崩溃等bug解决方案

大家都知道,CoordinatorLayout嵌套AppBarLayout和RecyclerView可以用来实现折叠滑动,至于怎么实现这里就不写了,网上有很多,这里先说我所经历的这个项目需求,(当然觉得太长可以直接看最下面的解决方案哦

1:一个长条的布局,上面就是普通的布局,中间有地图等按钮,地图下面有列表列表最下面还有一行文字:“共XX条数据”。2:要求当地图滑动到顶部的时候停留上方,然后可以滑动下面的列表。

3:当列表滑动到最下面的时候,会显示最下面的一行文字:“共XX条数据”。

4:我们会频繁设置不同的数据源,改变列表的数据内容和长度。大概的布局格式就是下面这种嵌套方式。

  

        

            

                

                   ……
                

                


                    …………
                    …………

                

            


           

                


                




        
    

和网上很多方法一样,滑动停留顺利实现,重要的就是这一行app:layout_behavior="@string/appbar_scrolling_view_behavior",到这里上面部分就会自动停留,然后再滑动下面部分的。

但是我们的需求是滑动完了列表,下面还有一行文字:“共XXX条数据”,于是我想当然的给recyclerView加了脚布局,加了脚布局以后,也顺利显示了下方文字,但是还有需求就是要频繁的设置列表数据,地图嘛,切换城市以后,会有不同的数据,可能一条,可能两条,甚至没有,这个时候,频繁设置会导致在item没有被回收的时候,添加数据报错崩掉,所以在adapter中添加

  @Override
    public int getItemCount() {
        return list == null ? 0 : list.size();
    }

这一段就可以了,这里添加这一段就是判断了长度,于是再怎么频繁设置都不会崩掉了。关于加这个的报错具体情况,可以看我上一篇文章:解决java.lang.IllegalArgumentException: Scrapped or attached views may not be recycled. isScrap:false

但是加上这一段以后,会出现Recyclerview的脚布局不显示的问题,于是我就在list.size()后面加1,最后也完美显示了,但是频繁设置数据的时候,又会崩掉,因为毕竟有的位置还没来得及回收item。

  @Override
    public int getItemCount() {
        return list == null ? 0 : (list.size()+1);
    }

 现在的问题:加脚布局,能够完美实现需求,但频繁设置数据,会崩掉 。而判断了list.size以后又不能显示脚布局,当list.size()+1以后,频繁设置数据还是会崩掉。

于是我就想,要不不要脚布局了,直接把脚布局的TextView写到页面布局里面去,就放在Recyclerview下面,于是习惯性的用LinearLayout嵌套Recyclerview和TextView,把app:layout_behavior="@string/appbar_scrolling_view_behavior"放到LinearLayout中,结果Recyclerview数据能充满整个屏幕的时候,也就是地图停留,下面列表可以滑动的时候,还是看不到TextView,但是只有一条两条数据的时候,就可以看到TextView,花了两天时间,不经意看到了NestedScrollView,于是用NestedScrollView嵌套LinearLayout,再嵌套Recyclerview和TextView,然后在NestedScrollView中加上属性android:fillViewport="true" Java代码里: mRecyclerView.setNestedScrollingEnabled(false);

成功解决所有问题。

总结:当你要实现:1.滑动停留;2.频繁设置列表数据;3.列表下面还有其他View样式

这个时候最好的解决办法是1:在adapter中设置getItemCount,return  list.size(),2.在布局中使用NestedScrollView嵌套LinearLayout,再嵌套Recyclerview和TextView(也就是脚布局,可以任意改成其他View),把app:layout_behavior="@string/appbar_scrolling_view_behavior"放到NestedScrollView中,所有功能全部实现。

支持的领一个红包吧

CoordinatorLayout嵌套RecyclerView时加脚布局,频繁设置数据崩溃等bug解决方案_第1张图片

你可能感兴趣的:(原创)