自定义动态列表 Android Jetpack 的一部分。

试用 Compose 方式
Jetpack Compose 是推荐在 Android 设备上使用的界面工具包。了解如何在 Compose 中使用布局。
<ph type="x-smartling-placeholder"></ph> 延迟列表和网格 →

你可以自定义 RecyclerView 以满足您的特定需求。标准类 使用 RecyclerView 提供了大多数开发者需要的所有功能。在 在许多情况下,您只需为每个 ViewHolder 设计视图,然后编写 以使用适当的数据更新这些视图。但是,如果您的应用 您可以采用多种方式修改标准行为。 本文档介绍了一些可能的自定义设置。

修改布局

RecyclerView 使用布局管理器来放置 以及确定何时重复使用已不再使用的项视图 用户可见的内容重复使用(或循环使用)视图、布局 管理器可能会要求适配器将视图的内容替换为 不同的元素。以这种方式回收视图可提高 避免创建不必要的视图或执行 偏贵 findViewById() 查询。Android 支持库包含三个标准布局管理器: 其中提供了许多自定义选项:

  • LinearLayoutManager: 将各个项排列在一维列表中。使用 LinearLayoutManagerRecyclerView 可提供 功能,比如 ListView 布局。
  • GridLayoutManager: 将各个项排列在二维网格中,就像 棋盘格。将 RecyclerViewGridLayoutManager 提供类似于 GridView 布局。
  • StaggeredGridLayoutManager: 将各项排列在二维网格中,每列都略微偏移 就像美国国旗上的星星一样。

如果这些布局管理器不能满足您的需求,您可以通过 扩展 RecyclerView.LayoutManager 抽象类。

为列表项添加动画

每当某项内容发生变化时,RecyclerView 都会使用 animator 来更改其外观。此 animator 是一个对象,用于扩展抽象 RecyclerView.ItemAnimator 类。默认情况下,RecyclerView 使用 DefaultItemAnimator 提供动画。如果您想提供自定义动画,可以 通过扩展 RecyclerView.ItemAnimator

启用列表项选择

通过 recyclerview-selection 库可让用户使用触摸选择 RecyclerView 列表中的项 或鼠标输入这样,您就可以继续控制 所选内容。您还可以保留对控制选择的政策的控制权 例如,哪些项有资格被选中,以及可以同时选中多少项 属性。

如需为 RecyclerView 实例添加选择支持,请按照下列步骤操作: 具体步骤:

  1. 确定要使用的选择键类型,然后构建 ItemKeyProvider

    您可以使用以下三种密钥类型来识别所选项:

    有关选择键类型的详细信息,请参阅 SelectionTracker.Builder

  2. 实施 ItemDetailsLookup
  3. ItemDetailsLookup 可允许选择库访问 关于指定日期的 RecyclerView 件商品的信息 MotionEvent。 它实际上相当于一个工厂 ItemDetails 备份或提取的实例, RecyclerView.ViewHolder 实例。

  4. 更新内容 View 个对象: RecyclerView,以反映用户是选择还是 可将其取消选中。

    选择库不会为 所选项目。在实现时提供此 ID onBindViewHolder()。 我们建议您采用以下方法:

  5. 使用ActionMode 来向用户提供对所选项执行操作所需的工具。
  6. 注册 SelectionTracker.SelectionObserver 以便在选择发生更改时收到通知。首次创建选择时 启动 ActionMode 以将其呈现给用户并提供 特定于该选择的操作。例如,您可以向 ActionMode 格,然后连接此栏上的返回箭头即可清除 选择。当选择变空时(如果用户清除了 - 终止操作模式。

  7. 执行任何经过解释的次级操作。
  8. 在事件处理流水线结束时,该库可能会确定 用户尝试通过点按来激活某个商品,或者 尝试拖动一个或一组选定项。请通过注册适当的监听器来回应这些解释。有关 请参阅 SelectionTracker.Builder

  9. 使用 SelectionTracker.Builder 汇编所有内容。
  10. 以下示例展示了如何将这些部分组合在一起:

    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() 方法中选择状态。

  11. 将所选项包括在 活动 Lifecycle 事件。
  12. 如需在 activity 生命周期事件中保留选择状态,您的应用 必须调用选择跟踪器的 onSaveInstanceState()onRestoreInstanceState() 方法(从 Activity 的 onSaveInstanceState()onRestoreInstanceState() 方法。您的应用还必须为 SelectionTracker.Builder 构造函数。此 ID 是必需的,因为 一个 activity 或 fragment 可能有多个不同的可选择列表, 所有这些对象都需要保持在它们的已保存状态中

其他资源

如需了解详情,请参阅以下参考文档。