簡體   English   中英

Jetpack Compose 中的對話框

[英]Dialog in Jetpack Compose

我是 Jetpack Compose 的新手。 我剛剛在 Jetpack Compose 中實現了一個AlertDialog 我不清楚 Dialog show 和 dismiss 過程。 這是示例代碼:

@Composable
fun CreateAlertDialog() {
    Column {
        val openDialog = remember { mutableStateOf(false) }

        Button(
            onClick = {
                openDialog.value = true
            },
            modifier = Modifier
                .padding(16.dp)
                .fillMaxWidth()
        ) {
            Text(text = "Open Dialog")
        }

        if (openDialog.value){
            AlertDialog(
                onDismissRequest = {
                    openDialog.value = false
                },
                title = {
                    Text(text = "Dialog Title")
                },
                text = {
                    Text(text = "Text content")
                },
                confirmButton = {
                    Button(
                        onClick = {
                            openDialog.value = false
                        }
                    ) {
                        Text(text = "Ok")
                    }
                },
                dismissButton = {
                    Button(
                        onClick = {
                            openDialog.value = false
                        }
                    ) {
                        Text(text = "Cancel")
                    }
                },
                modifier = Modifier.padding(start = 32.dp, end = 32.dp)
            )
        }
    }
}

這很好用,但我不清楚這里是如何取消對話的。 對話框基於MutableState顯示

openDialog.value為 true 時顯示對話框。 單擊Button后會發生什么? 當單擊Button時, openDialog.value變為false並關閉dialog

對話關閉代碼在哪里執行?

這個state是怎么處理的?

任何人都可以解釋這對我有幫助。提前致謝。

對話關閉代碼在哪里執行? --> 只要你點擊按鈕, openDialog的值就會改變。 將為您的可組合項 function 觸發重組,並且 UI 將被重繪,因此您的對話框可見性將發生變化。 因此,當openDialog的值為 false 時,將跳過對話框代碼。 請檢查這個 -> https://developer.android.com/jetpack/compose/mental-model#recomposition

這個state是怎么處理的? --> State 通常用remembermutableState處理。 remember ,您可以將 object 的值保留在 memory 中,以防重組。 mutableState存儲值,並且可以在值更改時觸發重組。

以你的function為例。 單擊按鈕並且openDialog的值為 true。 這將導致重組。 現在,當通過重組再次調用CreateAlertDialog()時, openDialog的值將保持為真,因為它被包裝在remember{}中。 現在對話框將可見。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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