Notice
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- android ar 개발
- 플러터 설치 2022
- 안드로이드 라이선스 종류
- 2022 플러터 설치
- 큐 자바 코드
- 서비스 쓰레드 차이
- Rxjava Observable
- ANR이란
- 안드로이드 유닛테스트란
- 안드로이드 유닛 테스트
- ar vr 차이
- rxjava cold observable
- 스택 자바 코드
- 자바 다형성
- 스택 큐 차이
- 안드로이드 os 구조
- 멤버변수
- 객체
- jvm 작동 원리
- rxjava hot observable
- 안드로이드 레트로핏 사용법
- android retrofit login
- 안드로이드 유닛 테스트 예시
- 클래스
- 안드로이드 레트로핏 crud
- 2022 플러터 안드로이드 스튜디오
- 서비스 vs 쓰레드
- 안드로이드 라이선스
- jvm이란
- rxjava disposable
Archives
- Today
- Total
나만을 위한 블로그
[Android Compose] LazyColumn을 활용한 복수 선택 기능 구현 본문
728x90
반응형
이 포스팅에선 Compose를 사용해 리스트뷰를 만들고 아이템을 선택하면 체크상태를 변경해 표시하는 예제를 확인한다. 전체 코드는 아래 영상을 참고했다.
https://www.youtube.com/watch?v=pvNcJXprrKM
전체 코드는 아래와 같다.
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Check
import androidx.compose.material3.Icon
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
@Composable
fun MultiSelectionScreen(modifier: Modifier = Modifier) {
var items by remember {
mutableStateOf(
(1..100).map {
ListItem(
title = "아이템 $it",
isSelected = false
)
}
)
}
LazyColumn(
modifier = modifier.fillMaxSize()
) {
items(items.size) { i ->
Row(
modifier = Modifier.fillMaxWidth()
.clickable {
items = items.mapIndexed { j, item ->
if (i == j) {
item.copy(isSelected = !item.isSelected)
} else {
item
}
}
}
.padding(16.dp),
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically,
) {
Text(text = items[i].title)
if (items[i].isSelected) {
Icon(
imageVector = Icons.Default.Check,
contentDescription = "Selected",
tint = Color.Green,
modifier = Modifier.size(20.dp)
)
}
}
}
}
}
data class ListItem(
val title: String,
val isSelected: Boolean,
)
이를 실행하면 100개의 아이템이 리스트에 표시되고 클릭하면 우측에 녹색 체크 아이콘이 표시된다. 선택한 아이템을 다시 선택하면 체크 아이콘은 사라진다.
클릭 시 copy를 써서 선택한 아이템의 체크 상태를 바꾸는 부분 외에는 딱히 특별할 게 없다. 클릭 시 선택된 아이템들을 알고 싶다면 clickable 마지막에 filter를 사용해서 로그를 출력하면 확인할 수 있다.
clickable {
items = items.mapIndexed { j, item ->
if (i == j) {
item.copy(isSelected = !item.isSelected)
} else {
item
}
}
Log.e("test", "filter : ${items.filter { it.isSelected }}")
}
여기서 얻은 선택된 아이템들은 별도 리스트에 담아서 다른 곳에서 활용하면 될 것이다.
반응형
'Android > Compose' 카테고리의 다른 글
[Android Compose] Supabase를 활용한 CRUD 구현 - 2 - (0) | 2025.01.11 |
---|---|
[Android Compose] Supabase를 활용한 CRUD 구현 - 1 - (0) | 2025.01.06 |
[Android Compose] 무한 캐러셀 구현하는 법 (0) | 2024.12.21 |
[Android Compose] 이미지 압축 구현하기 (0) | 2024.12.08 |
[Android Compose] Shared Element Transition 구현 요소 알아보기 (0) | 2024.12.08 |
Comments