簡體   English   中英

為什么我使用 Jetpack Compose 時編輯框對話框不填寫初始值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM