RecyclerView卡顿案例和办理方案

手机软件开发 2024-9-6 19:48:38 87 0 来自 中国
记载一次RecyclerView卡顿案例和办理方案。
需求:界面由两部分构成,顶部一个图片,图片下面是列表。在列表滑动时,图片跟着滑动。
实现:NestedScrollView [ LinearLayout [ ImageView , RecyclerView ] ]。
结果:当数据量较大时,RecyclerView 会越划越卡。
缘故起因:NestedScrollView 嵌套 RecyclerView,NestedScrollView 的 MeasureSpec.UNSPECIFIED 丈量子View,导致 RecyclerView 高度不确定,有多少item就会创建多少个ViewHolder,导致RecyclerView的复用机制失效。
办理:

  • 利用单个RecyclerView,顶部图片利用viewType实现。
  • 利用 CoordinatorLayout 替代 NestedScrollView。利用 AppBarLayout 的 app:layout_scrollFlags="scroll" 属性配合 app:layout_behavior="@string/appbar_scrolling_view_behavior" 属性。(NestedScrollView + RecyclerView 本质是为了办理嵌套滑动的题目。)
CoordinatorLayout [ AppBarLayout [ ImageView ] , RecyclerView ]
留意:AppBarLayout 利用 app:elevation="0dp" 属性,不是 android:elevation="0dp"。RecyclerView 利用 app:layout_behavior="@string/appbar_scrolling_view_behavior" 属性。
附:NestedScrollView  +  RecyclerView ,当两者可滑动方向 [同等] 时,可以用于列表数据量固定且较小的时间。当两者可滑动方向 [差别等] 时,可以正常利用。本质就是在 RecyclerView 的滑动方向上,尺寸是一个确定的值,使得复用机制正常工作。
总结:NestedScrollView 有大坑,审慎利用。当两者可滑动方向同等时,且列表数据量不固定,可以用 CoordinatorLayout 替代它。
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-11-22 04:59, Processed in 0.148246 second(s), 33 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表