android6.0以上CoordinatorLayout+AppBarLayout+NestedScrollView的坑:recyclerView只显示一行

(第一次写博客有点小紧张啊)

最近做打卡界面时用了AS自带的主题:ScrollActivity。ScrollActivity使用CoordinatorLayout+AppBarLayout+NestedScrollView的组合(官方的MD设计真的很舒服)。当我在android5.1真机上调试时一点毛病都没有,但当我用android8.1真机测试时,就出现了bug,recyclerView只能显示一行,6.1也是一样,但错误日志不一样。具体的问题就是点击添加item的按键后,界面上始终只显示一行,根本不显示剩下的item。

8.1的错误日志:

09-02 13:25:21.910 32556-32556/com.example.roy.recyclerviewdemo E/SchedPolicy: set_timerslack_ns write failed: Operation not permitted

(应该是由这个bug引起的这个错误,只是为了做个参考,还是布局问题)

废话不多说,解决方法是:

NestedScrollView布局中不可以直接使用一个recyclerView(仅在该组合的复杂布局中发现有此bug),它们的中间层级中还要嵌套一个布局(亲测ConstraintLayout可用,如下)。再次修改博客时,已经用了LinearLayout,此场景下只是需要在recyclerView外嵌套一个viewgroup,所以线性布局更高效,约束布局在复杂布局中更适合。




    

修改前后界面如下:

android6.0以上CoordinatorLayout+AppBarLayout+NestedScrollView的坑:recyclerView只显示一行_第1张图片                                      

接下来是废话环节:

在对每个error甚至部分warn使用了面向搜索引擎改bug法无果之后,我开始一个个排查错误(很多博客也给了我灵感)。

当我点击按钮后,Logcat中会显示recyclerView中已添加数据(插入数据到数据库,从数据库获取数据显示),但界面上不显示;

当我不使用ScrollActivity主题的布局时(activity中仅用NestedScrollView内嵌套一个recyclerView),再用原来代码发现recyclerView显示正常。

当我用了浑身解数还未解决这个bug时,我选择放弃。不能用好看的MD设计就不用吧。接下来,当我绕过这个坑之后,我在自学和自己试着做项目时,发现了不少这种设计的activity,我就想他们能实现,肯定还是我的解决方向错了。其实一开始看博客时,网上相关的答案基本上都是用下面这俩个方法来解决recyclerView只显示一行数据和滑动不顺畅问题的(尝试过N遍,确信不适不能解决我的问题)。

android:layout_height="wrap_content"
​​​​​​​android:nestedScrollingEnabled="false"

当我仔细对比我与他们的代码时,我发现类似的组合布局中的NestedScrollView中并不是只有一个recyclerView(其实我一直遵循着少嵌套少层级的布局理念),当我在中间嵌套一个布局之后,问题就解决了。。。。。。。(此时心情难以言表)

有意思的是,在改之前design里面布局是这样的:

android6.0以上CoordinatorLayout+AppBarLayout+NestedScrollView的坑:recyclerView只显示一行_第2张图片

修复了bug后就成了这样(正常listView,recyclerView应该都是这样的,之前看了N遍,根本没发现这个区别,要不是写博客,还是发现不了,嘻嘻):

android6.0以上CoordinatorLayout+AppBarLayout+NestedScrollView的坑:recyclerView只显示一行_第3张图片

就此,我的第一篇详细记录填坑的blog就写完了,望您指正。

隔了一个月又改了一下。

你可能感兴趣的:(Android布局)