创建动态列表的动态列表的最佳实践?
Best practise for creating a dynamic list of dynamic lists?
我想在运行时用任意数量的元素填充一个列表(RecycleView 或类似的)。
示例:
//Data Models
Animal(spices: String, breed: Breed)
Breed(name: String, color: String)
列表应该类似于:
Cats
-----------
Ragdoll
White
Bengal
Beige/Black
Dogs
-----------
Golden Retriever
Beige
German Shepard
Brown
St. Bernard
White/Brown
列表可以无限长,每个动物可以有无限数量的品种。
我一直在使用嵌套回收器,但恐怕这会导致性能不佳。
填充这种列表的"correct"方法是什么?
您需要一个具有多种视图类型的 RecyclerView 适配器。看看this codelab,应该对你有帮助。
编辑:在适配器中托管所有这些数据的最简单方法是将其展平。有点像:
val data = mutableListOf<Object>()
animals.forEach { animal ->
data.add(animal)
animal.breeds.forEach { -> breed
data.add(breed)
}
}
// ... use the data as a source for your adapter
项目视图类型
override fun getItemViewType(position: Int) =
when (getItem(position)) {
is Animal -> ITEM_VIEW_TYPE_HEADER
is Breed -> ITEM_VIEW_TYPE_ITEM
}
等等等等
我想在运行时用任意数量的元素填充一个列表(RecycleView 或类似的)。
示例:
//Data Models
Animal(spices: String, breed: Breed)
Breed(name: String, color: String)
列表应该类似于:
Cats
-----------
Ragdoll
White
Bengal
Beige/Black
Dogs
-----------
Golden Retriever
Beige
German Shepard
Brown
St. Bernard
White/Brown
列表可以无限长,每个动物可以有无限数量的品种。
我一直在使用嵌套回收器,但恐怕这会导致性能不佳。
填充这种列表的"correct"方法是什么?
您需要一个具有多种视图类型的 RecyclerView 适配器。看看this codelab,应该对你有帮助。
编辑:在适配器中托管所有这些数据的最简单方法是将其展平。有点像:
val data = mutableListOf<Object>()
animals.forEach { animal ->
data.add(animal)
animal.breeds.forEach { -> breed
data.add(breed)
}
}
// ... use the data as a source for your adapter
项目视图类型
override fun getItemViewType(position: Int) =
when (getItem(position)) {
is Animal -> ITEM_VIEW_TYPE_HEADER
is Breed -> ITEM_VIEW_TYPE_ITEM
}
等等等等