AlertDialog 关闭回调

时间:2021-03-24 15:22:04

标签: kotlin callback android-alertdialog

我正在用 Kotlin 开发一个 Android 应用。在 Utils 类中我有这个方法:

fun showAutoHideMessage(context: Context, title: String, message: String,  positiveButtonTitle: String?, negativeButtonTitle: String?, neutralButtonTitle: String?, delay: Long, okListener: DialogInterface.OnClickListener){
        val builder = AlertDialog.Builder(context)
        with(builder)
        {
            setTitle(title)
            setMessage(message)
            positiveButtonTitle?.let {
                setPositiveButton(positiveButtonTitle, okListener)
            }
            negativeButtonTitle?.let {
                setNegativeButton(negativeButtonTitle, okListener)
            }
            neutralButtonTitle?.let {
                setNeutralButton(neutralButtonTitle, okListener)
            }
    
            val alert = create()
            alert.show()
    
            val handler = Handler()
            val runnable = Runnable {
                if (alert.isShowing()) {
                    alert.dismiss()
                }
            }
            alert.setOnDismissListener(DialogInterface.OnDismissListener { handler.removeCallbacks(runnable) })
            handler.postDelayed(runnable, delay)
        }
    }

这个想法是显示一个警报对话框并在一段时间后关闭它,直到今天我都想在关闭时间后做一些事情。所以我让用户触摸肯定的按钮并且 onClickListener 被很好地触发(稍后我调用远程网络服务)。用户可以取消,所以 onClickListener 被触发,我什么都不做。但延迟后,AlertDialog 被解除,我也想调用远程网络服务。

我做了第一种方法,将 DialogInterface.OnDismissListener 传递给这个函数,似乎可行,但我无法执行 handler.removeCallbacks(runnable),我不确定是否有更好的方法。

这就是我现在调用函数的方式:

showAutoHideMessage(this, "Title", "Message", "Confirm", "Cancel", null, 5000,
                    DialogInterface.OnClickListener { dialog, which ->
                        when (which) {
                            DialogInterface.BUTTON_POSITIVE -> {
                                doSomething()
                            }
                            DialogInterface.BUTTON_NEGATIVE -> {

                            }
                            DialogInterface.BUTTON_NEUTRAL ->{

                            }
                        }
                    }/*,
                    DialogInterface.OnDismissListener {
                        doSomething()
                    }*/
                    )

0 个答案:

没有答案
相关问题