data class object1()
data class object2()
在我的@Composable屏幕上,我有2个选项卡,每个选项卡都显示一个列表。
when (tabToDisplay) {
TabCategory.1-> Section1(list = listOf<object1>())
TabCategory.2-> Section2(list = listOf<object2>())
}
@Section1
和@Section2
与
Column(){
list.forEach {
UiItem1()
//or
UiItem2()
}
}
内部唯一的区别是我创建的项目的类型。
问题:我如何简化我的代码只有1@Composable
节为我的列表对象
您可以向Section
添加一个通用参数和一个内容构建器:
@Composable
fun<T> Section(list: List<T>, itemContent: @Composable (T) -> Unit) {
Column(){
list.forEach {
itemContent(it)
}
}
}
那么你可以这样写:
when (tabToDisplay) {
TabCategory.1 -> {
Section(list = listOf<Object1>()) {
UiItem1(it)
}
}
TabCategory.2 -> {
Section(list = listOf<Object2>()) {
UiItem2(it)
}
}
}
注。根据kotlin风格指南,类应该用PascalCase命名。当你习惯了这一点,它将提高你的开发速度,因为你的眼睛将更容易识别代码中的变量/类。它在大多数开发命令中也是必需的,所以最好马上习惯它。
为两个模型创建一个parentClass,设为ParentObjClazz
保留一个可组合的@Section
,它包含TabCategory
和ParentObjClazz
的列表
@Composable
fun Section(tabCategory: TabCategory, list: List<ParentObjClazz>) {
//...
}
转换对象并根据tabCategory
或子类type
检查来填充视图