使用自定义Anko布局DSL关闭警报对话框

时间:2018-03-21 13:04:14

标签: android kotlin anko

我使用包含TextViewEditTextButton的简单视图创建了以下提醒对话框:

alert {
            customView {
                verticalLayout {
                    textView {
                        text = getString(R.string.enter_quantity)
                        textSize = 18f
                        textColor = Color.BLACK
                    }.lparams {
                        topMargin = dip(17)
                        horizontalMargin = dip(17)
                        bottomMargin = dip(10)
                    }

                    val quantity = editText {
                        inputType = InputType.TYPE_CLASS_NUMBER
                        background = ContextCompat.getDrawable(this@ProductsList, R.drawable.textbox_bg)
                    }.lparams(width = matchParent, height = wrapContent) {
                        bottomMargin = dip(10)
                        horizontalMargin = dip(17)
                    }

                    button(getString(R.string.confirm)) {
                        background = ContextCompat.getDrawable(this@ProductsList, R.color.colorPrimary)
                        textColor = Color.WHITE
                    }.lparams(width = matchParent, height = matchParent) {
                        topMargin = dip(10)
                    }.setOnClickListener {
                        if (quantity.text.isNullOrBlank())
                            snackbar(parentLayout!!, getString(R.string.enter_valid_quantity))
                        else
                            addToCart(product, quantity.text.toString().toInt())
                    }
                }
            }
        }.show()

我想在单击按钮并执行if-else子句时将其忽略。我尝试使用this@alert,但它没有提供对话框方法。

2 个答案:

答案 0 :(得分:7)

这是有问题的,因为当对话框尚不存在时,您注册监听器的adb shell rm -rf /data/data/appname.appname函数调用会执行。

这是一种方法,使用本地lateinit变量使监听器内的button可用:

dialog

您还可以将构建器的结果分配给类属性等。请注意,lateinit var dialog: DialogInterface dialog = alert { customView { button("Click") { dialog.dismiss() } } }.show() 可用于局部变量{。{3}}。

答案 1 :(得分:0)

您可以简单地在“是”或“否”按钮回调中使用it.dismiss(),例如此处itDialogInterface

alert(getString(R.string.logout_message),getString(R.string.logout_title)){
        yesButton {
            // some code here
            it.dismiss()
        }
        noButton {
            it.dismiss()
        }
    }.show()