View实战 [ScrollView 和 RecyclerView 显示不全问题]

1,178 阅读1分钟

滑动冲突

ScrollView内部嵌套 RecyclerView 时, 在竖直方向进行滑动时会有滑动冲突

内部拦截

通过重写RecyclerViewonTouchEvent方法不消费事件, 事件会被重新交给ScrollView处理。

外部拦截

通过重写ScrollViewonInterceptTouchEvent对事件进行拦截处理。


显示不全

解决滑动冲突之后发现RecyclerView部分显示不全。 通过日志记录发现下面两种解决方法都会导致RecyclerView中的所有数据一次性进行加载, 这样会有性能问题(Item不能复用), 这种方案不适合用来加载大量的数据。 个人感觉网络数据一般都是初始时显示几条后面一遍滑动一遍加载, 问题应该也不大。

使用NestedScrollView

在RecyclerView外面嵌套一层RelativeLayout


ScrollView滑动到底部刷新数据

ScrollView嵌套RecyclerView滑动示意图.png

notifyDataSetChanged

内部通过reqestLayout进行刷新, 会刷新整个RecyclerView

notifyItemRangeChanged

只会针对指定范围的元素进行刷新


参考