如何用函数组合动态构建 RecyclerView:Android-Extensions ComposedAdapter 完全解析
如何用函数组合动态构建 RecyclerViewAndroid-Extensions ComposedAdapter 完全解析【免费下载链接】Android-ExtensionsAn Android library with modules to quickly bootstrap an Android application.项目地址: https://gitcode.com/gh_mirrors/an/Android-Extensions在 Android 开发中ComposedAdapter是 Android-Extensions 库里最被低估的组件之一它让你不继承任何类只用几个函数就能动态构建一个 RecyclerView 适配器。对于新手来说这意味着告别冗长的onCreateViewHolder、onBindViewHolder样板代码用 Kotlin 风格更简洁地搞定列表。传统 Adapter 写法为什么让人头疼按官方推荐你通常要这样做三件事继承RecyclerView.Adapter重写创建、绑定、计数等方法为每种单元格单独定义一个ViewHolder子类想监听复用、附加、回收等回调时再重写更多方法。数据一变还得手动notifyDataSetChanged()闪烁、卡顿风险全靠自己小心。Android-Extensions 的 RecyclerView 模块给出的思路是别再继承 Adapter 了把它“组合”出来——核心类就是ComposedAdapter源码位置recyclerview/src/main/java/com/tunjid/androidx/recyclerview/ComposedAdapter.kt。两个核心函数创建 绑定调用入口是adapterOf()函数必填参数只有三个itemsSource() - ListItemT一个“取数据”的函数每次查询列表时都会调用天然支持数据源随时变化viewHolderCreator(parent, viewType) - ViewHolder负责创建单元格视图viewHolderBinder(holder, item, position) - Unit负责把数据绑定到单元格上。下面这段就是项目里真实的用法app/src/main/java/com/tunjid/androidx/tablists/doggo/DoggoListFragment.kt整个狗狗网格列表就是这样搭起来的adapter adapterOf( itemsSource Doggo.Companion::doggos, viewHolderCreator { parent, _ - parent.viewHolderFrom(ViewholderDoggoListBinding::inflate) }, viewHolderBinder { holder, doggo, _ - holder.doggoBinder?.bind(doggo) }, itemIdFunction { it.hashCode().toLong() } )注意viewHolderFrom是配套的BindingViewHolder能力recyclerview/src/main/java/com/tunjid/androidx/recyclerview/viewbinding/BindingViewHolder.kt直接由 ViewBinding 类生成 ViewHolder连 ViewHolder 子类都不用写。可选参数速查动态列表的全部控制点adapterOf()还有 9 个可选参数按需传入即可不传就回落到默认行为参数作用适合场景viewHolderPartialBinder带 payloads 的局部更新绑定只刷新某一行、避免整页重绘viewTypeFunction根据数据项决定视图类型混合多种样式的列表itemIdFunction提供稳定 ID自动开启 stableIds共享元素转场、按 ID 查找视图onViewHolderAttached / Detached单元格进入/离开窗口回调播放暂停动画、统计曝光onViewHolderRecycled / RecycleFailed回收成功与回收失败回调排查“无法回收”警告onAttachedToRecyclerView / onDetachedFromRecyclerViewAdapter 挂载/卸载回调附加 ItemDecoration、监听器这些回调覆盖了标准 Adapter 的全部生命周期钩子等于把“需要重写的每一个方法”都变成了“可选的函数参数”。进阶listAdapterOf 让数据更新自带 Diff 动画数据动态变化的列表更推荐listAdapterOf()recyclerview/src/main/java/com/tunjid/androidx/recyclerview/ComposedListAdapter.kt。它在组合式写法之上直接内置了DiffUtil调用submitList(newList)插入、删除、移动的动画就自动完成。项目里蓝牙扫描页app/src/main/java/com/tunjid/androidx/tabcomms/ble/BleScanFragment.kt就是这样把实时扫描到的设备平滑刷新进列表的val listAdapter listAdapterOf( initialItems listOf(), viewHolderCreator { parent, _ - parent.viewHolderFrom(ViewholderScanBinding::inflate) }, viewHolderBinder { holder, result, _ - holder.bind(result) } ) adapter listAdapter // ViewModel 数据变化时 viewModel.state.mapDistinct(BleState::items) .observe(viewLifecycleOwner, listAdapter::submitList)如果数据项想参与精确 diff可以让它实现Diffable接口recyclerview/src/main/java/com/tunjid/androidx/recyclerview/diff/Diffable.kt只需提供一个diffId其余比较逻辑有默认实现。不止 Adapter一个模块搞定列表全家桶ComposedAdapter 只是 RecyclerView 模块的冰山一角同一目录里还有ComposedEndlessScroller几行代码实现上拉加载、无限滚动RecyclerViewMultiScroller同步多个列表的滚动轻松搭出“表格”效果见app/src/main/java/com/tunjid/androidx/tablists/tables/Drag Drop 支持SwipeDragTouchHelper让拖拽排序和侧滑删除不用手写触摸逻辑viewHolderDelegate 委托把“当前绑定的数据”存成 ViewHolder 的属性读起来像普通成员变量。模块说明可参考recyclerview/README.md示例 App 的完整演示代码在app/src/main/java/com/tunjid/androidx/tablists/下。如何快速上手在build.gradle中添加依赖即可构件托管在 Maven Centralimplementation com.tunjid.androidx:recyclerview:1.x.x然后记住三句话静态数据列表→ 用adapterOf()传数据源 创建函数 绑定函数动态数据列表→ 用listAdapterOf()配合submitList()自动 diffViewHolder→ 用viewHolderFrom()从 ViewBinding 直接生成不写子类。从此“组合”代替“继承”你的 RecyclerView 代码量可以砍掉一半而且逻辑全部集中在一个函数调用里读起来一目了然。【免费下载链接】Android-ExtensionsAn Android library with modules to quickly bootstrap an Android application.项目地址: https://gitcode.com/gh_mirrors/an/Android-Extensions创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考