현상
- TimePicker 사용 해 시간값을 리스트에 저장 후 출력 하는 과정에서
- 리스트의 참조 값이 계속 출력되는 현상
@Composable
fun MainSrceen(){
var showTimePicker by remember { mutableStateOf(false) }
var seletTime: TimePickerState? by remember { mutableStateOf(null) }
var timelist = remember { mutableStateListOf<String>() }
..
..
...
....
if (showTimePicker == true) {
Box() {
TimePickerDialog(onConfirm = { time ->
seletTime = time
showTimePicker = true
timelist.add(seletTime.toString())
}, onDismiss = {
showTimePicker = false
})
}
}
..
..
...
for (time in timelist) {
Text(
text = time, // timelist.get(index = timelist.indexOf(time)), 도 안댐
fontSize = 30.sp,
modifier = Modifier.padding(10.dp),
)
}
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun TimePickerDialog(
onConfirm: (TimePickerState) -> Unit,
onDismiss: () -> Unit,
) {
val currentTime = Calendar.getInstance()
val timePickerState = rememberTimePickerState(
initialHour = currentTime.get(Calendar.HOUR_OF_DAY),
initialMinute = currentTime.get(Calendar.MINUTE),
is24Hour = true,
)
TimePickerDialog(
onDismiss = { onDismiss() },
onConfirm = { onConfirm(timePickerState) }
) {
androidx.compose.material3.TimePicker(
state = timePickerState,
)
}
}
@Composable
fun TimePickerDialog(
onDismiss: () -> Unit,
onConfirm: () -> Unit,
content: @Composable () -> Unit
) {
AlertDialog(
onDismissRequest = onDismiss,
dismissButton = {
TextButton(onClick = { onDismiss() }) {
Text("Dismiss")
}
},
confirmButton = {
TextButton(onClick = { onConfirm() }) {
Text("OK")
}
},
text = { content() }
)
}
원인
- timelist가 시간 값을 담고 있지 않고, TimePickerState와 같은 특정 객체를 담고 있는 리스트
- 따라서 Text에 전달 할 때, 객체의 toString() 메소드가 호출되어 해당 메모리의 참조값이 출력
해결 방법