如何知道我何时从 Jetpack Comopse 中的对话框返回到活动

问题描述 投票:0回答:1

我有一个简单的撰写对话框,我需要知道何时关闭对话框并返回到活动,以便我可以触发该活动中的函数。此函数应该仅在我关闭对话框后触发。我应该如何/是否将参数传递到此对话框中?如何让它知道我何时返回活动?活动如下:

binding.impersonateSection.apply {
            setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
            setContent {
            var openDialog= remember { mutableStateOf(false) }
                ButtonComponent(
                    onClick = {openDialog.value = true}
                               )

                                if (openDialog.value) {
                                   MyCustomDialogPopUp(openDialog)
                                 }

然后我的可组合对话框如下所示:

fun CustomDialogPopUp(openDialogBox: MutableState<Boolean>) {
    AlertDialog(
        title = { Text("Are you sure you want to delete this?") },
            dismissButton = {
            TextButton(onClick = { openDialogBox= false }) {
                Text("Cancel".uppercase())
            }
        )
    
android kotlin android-jetpack-compose android-jetpack
1个回答
0
投票

您可以尝试将 Activity 函数传入 Dialog,并在 Dialog 关闭时调用它。请参阅以下示例,了解如何将 Activity 函数引用传递给 Composable

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        //...

        binding.impersonateSection.apply {
            setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
            setContent {
                var openDialog = remember { mutableStateOf(false) }
                ButtonComponent(
                    onClick = {openDialog.value = true}
                )

                if (openDialog.value) {
                    // We pass an Activity Function Reference to the Dialog
                    MyCustomDialogPopUp(openDialog, ::activityFunction)
                }
           }
    }

    fun activityFunction(param: Int) {
        Toast.makeText(this, param.toString(), Toast.LENGTH_SHORT).show()
    }
}

然后在您的对话框可组合项中:

fun CustomDialogPopUp(
    openDialogBox: MutableState<Boolean>, 
    onDismissCallback: (returnValue: Int) -> Unit
) {
    AlertDialog(
        title = { Text("Are you sure you want to delete this?") },
        dismissButton = {
            TextButton(onClick = { openDialogBox = false; onDismissCallback(123) }) {
                Text("Cancel".uppercase())
            }
        }
    )
}
© www.soinside.com 2019 - 2024. All rights reserved.