【发布时间】:2021-11-26 15:47:39
【问题描述】:
我有一个只读的 TextField,它从 DatePicker 中获取值(不可组合)。 问题是当 TextField 的值改变时 onValueChange 回调不会调用。 当我尝试通过用户输入更改值时(使 readonly = false)我工作正常。 那么在没有用户输入的情况下调用 onValueChange 的任何解决方案? 一些代码:
val start = remember { mutableStateOf(state.timeStart) }
OutlinedTextField(
value = DateTimeConverter.formatLogsTime(start.value),
onValueChange = {
start.value = DateTimeConverter.logDateToEpoch(it)!!
onEvent(Logs.Event.TimeStartChanged(start.value))
},
colors = TextFieldDefaults.textFieldColors(
backgroundColor = Color.White,
unfocusedIndicatorColor = Color.Transparent,
focusedIndicatorColor = Color.Transparent
),
textStyle = textStyle,
modifier = Modifier
.fillMaxWidth()
.padding(20.dp)
.background(
LightLightGray,
RoundedCornerShape(8.dp)
),
trailingIcon = {
Icon(
Icons.Rounded.DateRange, "DateRange",
Modifier.clickable { createDateTimePicker(currentContext, start) })
},
readOnly = true
)
private fun createDateTimePicker(
context: Context,
dateHolder: MutableState<Long>
) {
val calendar = Calendar.getInstance()
val listener = OnDateSetListener { _, year, monthOfYear, dayOfMonth ->
calendar.set(Calendar.YEAR, year)
calendar.set(Calendar.MONTH, monthOfYear)
calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth)
val rawDate = "$dayOfMonth.$monthOfYear.$year 23:59:59"
val newDate = DateTimeConverter.logDateToEpoch(rawDate)
if (newDate != null)
dateHolder.value = newDate
}
val picker = DatePickerDialog(context, listener, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH))
picker.show()
}
【问题讨论】:
标签: android kotlin android-jetpack-compose