Material Design 的 RecyclerView 分组并带嵌套分组展示

阅读时长 9 分钟读完

前言

在 Android 开发中,RecyclerView 是一个非常常用的控件。使用 RecyclerView 可以方便的实现列表展示,但是有时候我们需要对列表进行分组显示并带嵌套分组展示,这就需要用到 RecyclerView 的分组功能。本文将详细介绍 Material Design 的 RecyclerView 分组并带嵌套分组展示。

分组实现原理

RecyclerView 的分组实现原理是在 RecyclerView.Adapter 中重写 getItemViewType() 方法来返回不同 item 类型。也就是说,在 RecyclerView.Adapter 中可以通过 getItemViewType() 方法来判断当前 item 的类型,然后根据不同的类型来加载不同的布局。

分组实现步骤

  1. 创建一个 RecyclerView.Adapter 类;
  2. 重写 getItemViewType() 方法并返回不同 item 类型;
  3. 在 onCreateViewHolder() 方法中根据不同的 item 类型加载不同的布局;
  4. 在 onBindViewHolder() 方法中设置 item 数据。

示例代码

-- -------------------- ---- -------
------ ----- --------- ------- --------------------------------------------- -

    ------- ------------ ----------
    ------- ------ ----- --- ---------------- - --
    ------- ------ ----- --- --------------- - --

    ------ ---------------------- --------- -
        --------- - ---------
    -

    ---------
    ------ ----------------------- ---------------------------- ------- --- --------- -
        -------------- -------- - -----------------------------------------
        -- --------- -- ----------------- -
            ---- ---- - -------------------------------------- ------- -------
            ------ --- -----------------------
        - ---- -
            ---- ---- - ------------------------------------- ------- -------
            ------ --- ----------------------
        -
    -

    ---------
    ------ ---- ---------------------------------------- ------- --- --------- -
        ------ ---- - ------------------------
        -- ------- ---------- ----------------- -
            ------------------- -------------------
        - ---- -
            ------------------ -------------------
        -
    -

    ---------
    ------ --- ------------------- --------- -
        ------ ---- - ------------------------
        -- ----------------- -
            ------ -----------------
        - ---- -
            ------ ----------------
        -
    -

    ---------
    ------ --- -------------- -
        ------ -----------------
    -

    ------ ----- ---------------- ------- ----------------------- -

        ------- -------- -------

        --------------------- --------- -
            ----------------
            ------ - -------------------------------------
        -

        ---- ----------- ----- -
            --------------------------------
        -
    -

    ------ ----- --------------- ------- ----------------------- -

        ------- -------- -------

        -------------------- --------- -
            ----------------
            ------ - -------------------------------------
        -

        ---- ----------- ----- -
            --------------------------------
        -
    -
-

在 MyAdapter 中,我们设置了两种不同的 item 类型 VIEW_TYPE_PARENT 和 VIEW_TYPE_CHILD。在 getItemViewType() 方法中,我们根据 item 的类型返回不同的 item 类型。在 onCreateViewHolder() 方法中,根据不同的 item 类型加载不同的布局。在 onBindViewHolder() 方法中,我们根据不同的 ViewHolder 设置不同的数据。我们可以在 ParentViewHolder 中设置 Parent 类型的数据,在 ChildViewHolder 中设置 Child 类型的数据。

嵌套分组展示

要实现嵌套分组展示,我们需要在 Parent 类型的数据中添加一个 List<ChildData>,然后在 ParentViewHolder 中添加一个 RecyclerView,将 ChildData 数据展示到 RecyclerView 中。下面是示例代码:

-- -------------------- ---- -------
------ ----- ---------------- ------- ----------------------- -

    ------- -------- -------
    ------- ------------ -------------------
    ------- ------------ --------------

    --------------------- --------- -
        ----------------
        ------ - -------------------------------------
        ------------------ - -------------------------------------
        ------------- - --- ---------------
        --------------------------------------- --------------------------------------------
        ---------------------------------------------
    -

    ---- ----------- ----- -
        --------------------------------
        -----------------------------------------------
    -
-

------ ----- --------------- ------- ----------------------- -

    ------- -------- -------

    -------------------- --------- -
        ----------------
        ------ - -------------------------------------
    -

    ---- -------------- ----- -
        --------------------------------
    -
-

------- ----- ------------ ------- ------------------------------------- -

    ------- --------------- ----------

    ---- ----------------------- --------- -
        --------- - ---------
        -----------------------
    -

    ---------
    ------ --------------- ---------------------------- ------- --- --------- -
        -------------- -------- - -----------------------------------------
        ---- ---- - ------------------------------------- ------- -------
        ------ --- ----------------------
    -

    ---------
    ------ ---- -------------------------------- ------- --- --------- -
        --------- ---- - ------------------------
        ------------------
    -

    ---------
    ------ --- -------------- -
        ------ --------- -- ---- - - - -----------------
    -
-

在 ParentViewHolder 中,我们添加了一个 RecyclerView 并实例化了一个 ChildAdapter。在 bind() 方法中,我们将 ChildData 数据设置到 ChildAdapter 中并更新 RecyclerView。在 ChildAdapter 中,我们设置了 ChildData 数据并且使用 notifyDataSetChanged() 方法告诉 RecyclerView 更新。

总结

在本文中,我们详细介绍了 Material Design 的 RecyclerView 分组并带嵌套分组展示的实现原理和步骤,并且提供了示例代码进行参考。在实际开发中,我们可以根据实际需求来自由组合并展示 RecyclerView 中的数据,并且通过 RecyclerView.Adapter 中的 getItemViewType() 方法来实现多样化的布局。希望本文能对大家有帮助。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6517f1f295b1f8cacd016acf

纠错
反馈