컴포즈에서는 ViewModel과 UI계층에서의 remember 사이의 경계가 흐려질 수 있다. 컴포저블 수준에서 상태를 가지는 것은 단기적으로는 더 간단하고 효율적이어 보일 수 있지만, 추후 확장성 등을 고려했을 때 잠재적인 부작용을 가질 수 있다. ViewModel을 사용하는 중앙 집중식 접근방식이 확장성, 일관성 측면에서 좋다.
https://blog.kotlin-academy.com/nested-lazycolumn-in-jetpack-compose-79cc5d56c603
Header, footer 예제
LazyColumn {
item {
HeroCardItem()
}
items(data) { item ->
Box(
modifier = Modifier
.fillMaxWidth()
.height(200.dp)
.background(Color.Magenta)
.padding(16.dp)
)
Spacer(modifier = Modifier.padding(8.dp))
}
item {
FooterCardItem()
}
}
LazyVerticalGrid(
columns = GridCells.Adaptive(minSize = 128.dp),
contentPadding = PaddingValues(8.dp)
) {
items(data.size) { index ->
Card(
modifier = Modifier
.padding(4.dp)
.fillMaxWidth(),
) {
Text(
text = data[index],
fontWeight = FontWeight.Bold,
textAlign = TextAlign.Center,
modifier = Modifier.padding(16.dp)
)
}
}
}
기존 view system의 chip과 유사하다.
가로+세로라면 그대로 구현 하면 된다.
같은 방향이라면, nested list의 크기를 고정하든지 lazy가 아닌 일반 list를 사용해야 한다.
LazyListScope의 확장함수로 아이템을 그린다.
fun LazyListScope.EventItem(
eventList: List<Event>,
onEventClick: (String) -> Unit
) {
items(eventList) { eventData ->
...
}
}