Skip to content

BaseNodeAdapter

mumu edited this page Sep 8, 2025 · 1 revision

BaseNodeAdapter

继承自BaseQuickAdapter

示例代码

基本使用

你的数据类,无需再集成任何接口或者基类。保持你现在的嵌套数据结构即可。

为了直观展示,这里以json举例:

[
  {
    "title": "Item 1",
    "childNode": [
      {
        "title": "Item 1.1"
      },
      {
        "title": "Item 1.2"
      }
    ]
  },
  {
    "title": "Item 2",
    "childNode": [
      {
        "title": "Item 2.1"
      },
      {
        "title": "Item 2.2",
        "childNode": [
          {
            "title": "Item 2.2.1"
          }
        ]
      },
      {
        "title": "Item 2.3"
      }
    ]
  }
]
// 需要重写以下三个方法
override fun getChildNodeList(position: Int, parent: Any): List<Any>? {
    // 获取子node,没有的情况,返回null
    when (parent) { // 判断数据类型
        is NodeEntity -> {
            // 一级
            return parent.childNode
        }

        is NodeEntity.Level2NodeEntity -> {
            // 二级
            return parent.childNode
        }

        is NodeEntity.Level2NodeEntity.Level3NodeEntity -> {
            // 三级 没有子node
            return null
        }

        else -> return null
    }
}

override fun isInitialOpen(position: Int, parent: Any): Boolean {
    // 哪些数据需要默认展开
    if (parent is NodeEntity) {
        return parent.title == "Item 1"
    }
    return false
}

override fun getItemViewType(position: Int, list: List<Any>): Int {
    // 获取 item 类型
    val item = list[position]
    when (item) {
        is NodeEntity -> {
            // 一级
            return 1
        }

        is NodeEntity.Level2NodeEntity -> {
            // 二级
            return 2
        }

        is NodeEntity.Level2NodeEntity.Level3NodeEntity -> {
            // 三级
            return 3
        }

        else -> return 0
    }
}
Clone this wiki locally