[英]Why doesn't the edit box dialog fill in initial value when I use Jetpack Compose?
我使用以下代碼顯示一個帶有初始值的編輯框對話框,用戶可以在該對話框上輸入新的描述並保存它。
我認為當我單擊“編輯描述”按鈕時, TextField上會顯示初始值“Hello” ,但實際上,TextField 上沒有顯示任何內容。
我的代碼有什么問題?
@Composable
fun ScreenDetail(
) {
var editDialog by remember { mutableStateOf(false) }
var description by remember {mutableStateOf("") }
editDialog(
isShow = editDialog,
onDismiss = { editDialog =false },
onConfirm ={ ... },
editFieldContent=description
)
Button(
modifier = Modifier,
onClick = {
description = "Hello"
editDialog = true
}
) {
Text("Edit Description")
}
}
@Composable
fun editDialog(
isShow: Boolean,
onDismiss: () -> Unit,
onConfirm: (String) -> Unit,
saveTitle: String = "Save",
cancelTitle:String = "Cancel",
dialogTitle:String ="Edit",
editFieldTitle:String ="Input description",
editFieldContent:String ="",
) {
var mText by remember { mutableStateOf(editFieldContent) }
if (isShow) {
AlertDialog(
confirmButton = {
TextButton(onClick = { onConfirm(mText) })
{ Text(text = saveTitle) }
},
dismissButton = {
TextButton(onClick = onDismiss)
{ Text(text = cancelTitle) }
},
onDismissRequest = onDismiss,
title = { Text(text = dialogTitle) },
text = {
Column() {
Text(text = editFieldTitle)
TextField(
value = mText,
onValueChange = { mText = it }
)
}
}
)
}
}
var mText by remember { mutableStateOf(editFieldContent) }
當editFieldContent
更改時,它不會更新,因為 remember{} 將值存儲在組合或鍵更改時。
然后,如果您不使用by
關鍵字,則通過委托或using mText.value = newValue
更改 mText。
如果你設置了一個key,那么當editDialog的editFieldContent
參數改變時, editDialog
里面的block會被重新計算。
var mText by remember(editFieldContent) { mutableStateOf(editFieldContent) }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.