自定义动态列表 Android Jetpack 的一部分。
你可以自定义
RecyclerView
以满足您的特定需求。标准类
使用
RecyclerView 提供了大多数开发者需要的所有功能。在
在许多情况下,您只需为每个 ViewHolder 设计视图,然后编写
以使用适当的数据更新这些视图。但是,如果您的应用
您可以采用多种方式修改标准行为。
本文档介绍了一些可能的自定义设置。
修改布局
RecyclerView
使用布局管理器来放置
以及确定何时重复使用已不再使用的项视图
用户可见的内容重复使用(或循环使用)视图、布局
管理器可能会要求适配器将视图的内容替换为
不同的元素。以这种方式回收视图可提高
避免创建不必要的视图或执行
偏贵
findViewById()
查询。Android 支持库包含三个标准布局管理器:
其中提供了许多自定义选项:
LinearLayoutManager
: 将各个项排列在一维列表中。使用LinearLayoutManager
的RecyclerView
可提供 功能,比如ListView
布局。GridLayoutManager
: 将各个项排列在二维网格中,就像 棋盘格。将RecyclerView
与GridLayoutManager
提供类似于GridView
布局。StaggeredGridLayoutManager
: 将各项排列在二维网格中,每列都略微偏移 就像美国国旗上的星星一样。
如果这些布局管理器不能满足您的需求,您可以通过
扩展
RecyclerView.LayoutManager
抽象类。
为列表项添加动画
每当某项内容发生变化时,RecyclerView
都会使用 animator
来更改其外观。此 animator 是一个对象,用于扩展抽象
RecyclerView.ItemAnimator
类。默认情况下,RecyclerView
使用
DefaultItemAnimator
提供动画。如果您想提供自定义动画,可以
通过扩展
RecyclerView.ItemAnimator
。
启用列表项选择
通过
recyclerview-selection
库可让用户使用触摸选择 RecyclerView
列表中的项
或鼠标输入这样,您就可以继续控制
所选内容。您还可以保留对控制选择的政策的控制权
例如,哪些项有资格被选中,以及可以同时选中多少项
属性。
如需为 RecyclerView
实例添加选择支持,请按照下列步骤操作:
具体步骤:
- 确定要使用的选择键类型,然后构建
ItemKeyProvider
。您可以使用以下三种密钥类型来识别所选项:
Parcelable
及其子类,例如Uri
String
Long
有关选择键类型的详细信息,请参阅
SelectionTracker.Builder
。 - 实施
ItemDetailsLookup
。 - 更新内容
View
个对象:RecyclerView
,以反映用户是选择还是 可将其取消选中。选择库不会为 所选项目。在实现时提供此 ID
onBindViewHolder()
。 我们建议您采用以下方法:- 在
onBindViewHolder()
中,调用setActivated()
-setSelected()
:开启View
对象true
或false
,具体取决于项目 。 - 更新视图样式以表示已激活状态。周三 建议使用 颜色状态 列出资源来配置样式。
- 在
- 使用
ActionMode
来向用户提供对所选项执行操作所需的工具。 - 执行任何经过解释的次级操作。
- 使用
SelectionTracker.Builder
汇编所有内容。 - 将所选项包括在 活动 Lifecycle 事件。
ItemDetailsLookup
可允许选择库访问
关于指定日期的 RecyclerView
件商品的信息
MotionEvent
。
它实际上相当于一个工厂
ItemDetails
备份或提取的实例,
RecyclerView.ViewHolder
实例。
注册
SelectionTracker.SelectionObserver
以便在选择发生更改时收到通知。首次创建选择时
启动 ActionMode
以将其呈现给用户并提供
特定于该选择的操作。例如,您可以向
ActionMode
格,然后连接此栏上的返回箭头即可清除
选择。当选择变空时(如果用户清除了
- 终止操作模式。
在事件处理流水线结束时,该库可能会确定
用户尝试通过点按来激活某个商品,或者
尝试拖动一个或一组选定项。请通过注册适当的监听器来回应这些解释。有关
请参阅
SelectionTracker.Builder
。
以下示例展示了如何将这些部分组合在一起:
Kotlin
var tracker = SelectionTracker.Builder( "my-selection-id", recyclerView, StableIdKeyProvider(recyclerView), MyDetailsLookup(recyclerView), StorageStrategy.createLongStorage()) .withOnItemActivatedListener(myItemActivatedListener) .build()
Java
SelectionTracker tracker = new SelectionTracker.Builder<>( "my-selection-id", recyclerView, new StableIdKeyProvider(recyclerView), new MyDetailsLookup(recyclerView), StorageStrategy.createLongStorage()) .withOnItemActivatedListener(myItemActivatedListener) .build();
要构建
SelectionTracker
您的应用必须提供相同的
RecyclerView.Adapter
用于初始化 RecyclerView
,以
SelectionTracker.Builder
。因此,在创建
SelectionTracker
实例,将其注入
RecyclerView.Adapter
。否则,您将无法查看商品的
从 onBindViewHolder()
方法中选择状态。
如需在 activity 生命周期事件中保留选择状态,您的应用
必须调用选择跟踪器的
onSaveInstanceState()
和
onRestoreInstanceState()
方法(从 Activity 的
onSaveInstanceState()
和
onRestoreInstanceState()
方法。您的应用还必须为
SelectionTracker.Builder
构造函数。此 ID 是必需的,因为
一个 activity 或 fragment 可能有多个不同的可选择列表,
所有这些对象都需要保持在它们的已保存状态中
其他资源
如需了解详情,请参阅以下参考文档。
- 向日葵
演示版应用,它使用
RecyclerView
。 - 使用 RecyclerView 显示可滚动列表 Codelab。
- Android 设备 Kotlin 基础知识:RecyclerView 基础知识 Codelab。