728x90
안녕하세요 오늘은 지난번 컴포즈를 사용해 체크박스를 만들어보았는데요
오늘은 체크된 아이템 개수를 동적으로 변경하는 텍스트뷰를 추가해보도록 하겠습니다
안드로이드 컴포즈로 체크 박스 만들기는 아래 링크에서 확인하실 수 있습니다
https://stickode.tistory.com/1309
목록에서 아이템의 선택 상태가 변경되면
선택된 아이템 개수 변수인 selectedCount 에 업데이트 됩니다
// 체크 박스 상태 리스트
val selectedItems = remember { mutableStateListOf<Boolean>().apply { repeat(cnt) { add(false) } } }
// 선택된 아이템 개수를 계산
val selectedCount by remember { derivedStateOf { selectedItems.count { it } } }
Column {
// 1) 선택된 아이템 개수를 표시
Text(
text = "선택된 아이템 : $selectedCount",
modifier = Modifier
.fillMaxWidth()
.padding(16.dp),
color = Color.Blue
)
// 2) 체크박스 리스트 표시
LazyColumn {
items(items) { item ->
val index = items.indexOf(item)
Row(
modifier = Modifier
.fillMaxWidth()
.padding(vertical = 8.dp)
.clickable {
selectedItems[index] = !selectedItems[index] // 체크박스 상태 토글
}
.padding(16.dp),
verticalAlignment = Alignment.CenterVertically
) {
Checkbox(
checked = selectedItems[index],
onCheckedChange = { checked -> selectedItems[index] = checked }
)
Text(
text = item,
color = Color.Black,
modifier = Modifier.padding(start = 16.dp)
)
}
}
}
아래는 전체 코드 입니다
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
Kotlin_exampleTheme {
// A surface container using the 'background' color from the theme
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colorScheme.background
) {
ItemList(cnt = 100)
}
}
}
}
}
// item list
@Composable
fun ItemList(cnt: Int) {
val items = List(cnt) { "Item ${it + 1}" }
// 체크 박스 상태 리스트
val selectedItems = remember { mutableStateListOf<Boolean>().apply { repeat(cnt) { add(false) } } }
// 선택된 아이템 개수를 계산
val selectedCount by remember { derivedStateOf { selectedItems.count { it } } }
Column {
// 1) 선택된 아이템 개수를 표시
Text(
text = "선택된 아이템 : $selectedCount",
modifier = Modifier
.fillMaxWidth()
.padding(16.dp),
color = Color.Blue
)
// 2) 체크박스 리스트 표시
LazyColumn {
items(items) { item ->
val index = items.indexOf(item)
Row(
modifier = Modifier
.fillMaxWidth()
.padding(vertical = 8.dp)
.clickable {
selectedItems[index] = !selectedItems[index] // 체크박스 상태 토글
}
.padding(16.dp),
verticalAlignment = Alignment.CenterVertically
) {
Checkbox(
checked = selectedItems[index],
onCheckedChange = { checked -> selectedItems[index] = checked }
)
Text(
text = item,
color = Color.Black,
modifier = Modifier.padding(start = 16.dp)
)
}
}
}
}
}
@Preview(showBackground = true)
@Composable
fun GreetingPreview() {
Kotlin_exampleTheme {
ItemList(cnt = 100)
}
}
시연 영상입니다
다음시간에는 아이템 목록을 직접 추가하고 삭제해보도록 하겠습니다
감사합니다
'안드로이드 코틀린' 카테고리의 다른 글
[Kotlin][Android] Jetpack Compose 목록에 텍스트 아이템 추가, 삭제하기 (4) | 2024.10.09 |
---|---|
[Kotlin][Android]SeekBar의 이미지 변경하기 (2) | 2024.10.06 |
[Kotlin][Android]전화번호 입력된 전화 앱 열기 (0) | 2024.09.30 |
[Kotlin][Android] Jetpack Compose 체크 박스 만들기 (6) | 2024.09.27 |
[Kotlin][Android] Jetpack Compose 클릭 이벤트 설정하기 (2) | 2024.09.22 |