如何在Android中做Alert对话框Kotlin返回布尔值

k4ymrczo  于 2023-06-04  发布在  Android
关注(0)|答案(1)|浏览(199)

我想使静态功能与警报对话框返回布尔值。
在C#中,它看起来像:

DialogResult dialogResult = MessageBox.Show("Sure", "Some Title", MessageBoxButtons.YesNo);
if(dialogResult == DialogResult.Yes)
{
    //do something
}
else if (dialogResult == DialogResult.No)
{
    //do something else
}

在Kotlin中,我有一个带有同伴对象的类

class Dialog {
    companion object {
        fun question(context: Context, title: String, message: String) {
            AlertDialog.Builder(context).apply {
                setIcon(R.drawable.ic_question)
                setTitle(title)
                setMessage(message)
                setPositiveButton("YES", DialogInterface.OnClickListener { dialog, which ->
                })
                setNegativeButton("NO", DialogInterface.OnClickListener { dialog, which ->
                })
            }.show()

        }
    }
}

我想从问题函数返回布尔结果。
我想在我的Activity中使用此函数,如下所示:

if(Dialog.question(this,"Title", "Message")) {
    //something
} else {
    //something
}

这可能吗?

cnh2zyt3

cnh2zyt31#

是的,有可能。
您需要:

  • 使用DialogFragment()扩展Dialog.kt类
  • 在对话框类中为您的Activity创建一个接口
  • 定义一个在对话框关闭时调用的函数
  • 覆盖对话框界面,使您所需要的
  • 使用您的界面

这是我的代码中的实现(测试和工作)
实施:
用DialogFragment扩展Dialog.kt类,使代码适应这个类并创建接口

class Dialog: DialogFragment() {
    interface InputListener {
        fun sendBoolean(value: Boolean)
    }
    ...
}

在正/负侦听器lambdas中,初始化接口并发送布尔值

val inputListener = activity as InputListener
inputListener.sendInput(YOUR_VALUE)
dialog?.dismiss()

转到您的活动并使用您的界面扩展它

class MainActivity: AppCompatActivity(), Dialog.InputListener {
   ...
}

现在最后,覆盖活动中的接口以运行所需的代码

override fun sendInput(value: Boolean) {
    if (value) {
        // Positive - true
    } else {
        // Negative - false
    }
}

请让我知道这是否解决了你的问题,如果没有,请尝试更新你的问题,我会通过更新我的答案来帮助你,快乐编码!

相关问题