首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >AlertDialog dialog.dismiss(),dialog.close()不工作

AlertDialog dialog.dismiss(),dialog.close()不工作
EN

Stack Overflow用户
提问于 2018-05-20 05:54:33
回答 4查看 9.3K关注 0票数 0

我必须在按钮上单击两次(any:积极、中性和消极),它才能关闭AlertDialog。

代码语言:javascript
运行
复制
import android.annotation.SuppressLint
import android.os.Bundle
import android.support.design.widget.Snackbar
import android.support.v7.app.AlertDialog
import android.support.v7.app.AppCompatActivity
import android.view.KeyEvent
import android.view.View
import com.example.said.puntodeventa.R.layout.layout_addproduct

class someClass : AppCompatActivity() {

@SuppressLint("StringFormatInvalid")
private fun someDialog(){
AlertDialog.Builder(this).apply {
                setTitle("title")
                setMessage("message")
                setNegativeButton("No"){ dialog, which ->
                    anEditText.text.clear()
                    anEditText.requestFocus()
                    dialog.cancel()
                    dialog.dismiss()
                }
                setNeutralButton("Neutral"){ dialog, which ->
                    someEditText.text.clear()
                    someEditText.requestFocus()
                    dialog.cancel()
                    dialog.dismiss()
                }
                setPositiveButton("Yes") { dialog, which ->
                    addProduct()
                    dialog.cancel()
                    dialog.dismiss()
                }
                create()
                show()
            }
        }

private fun addProduct(){
        //some code working properly
    }
}

addProduct().text.clear()可以完美地工作,但AlertDialog不会在我第一次单击它时关闭。

我尝试单独使用dialog.cancel()dialog.dismiss(),但似乎什么都不起作用,就像代码不在那里一样。

我也尝试过导入android.app.AlertDialog,结果也是一样的。

当我单击任何按钮时,这是日志中的红色文本,无论是第一次(当AlertDialog未关闭时)还是第二次(当它实际关闭时)。

代码语言:javascript
运行
复制
05-19 16:42:34.543 24647-24647/com.example.name.appdemo E/ViewRootImpl: sendUserActionEvent() mView == null

谢谢

EN

回答 4

Stack Overflow用户

发布于 2018-05-21 12:17:14

@Said :我复制了你的代码,它工作得很好,只需要一次点击关闭正面或负面按钮,所以我相信问题不在这一部分。

代码语言:javascript
运行
复制
private fun dialogCostPrice(){

    val dialogBuilder = AlertDialog.Builder(this)

    dialogBuilder.setTitle("Dialog Title")
    dialogBuilder.setMessage("Dialog Message")
    dialogBuilder.setPositiveButton("OK", { dialog, whichButton ->
        dialog.dismiss()
    })
    dialogBuilder.setNegativeButton("Cancel", { dialog, whichButton ->
        dialog.dismiss()
    })
    val b = dialogBuilder.create()
    b.show()
    }
票数 2
EN

Stack Overflow用户

发布于 2018-05-20 06:11:15

不要为get定义单击时事件DialogInterface.OnClickListener的侦听器

代码语言:javascript
运行
复制
fun showDialog() {
    val dialogBuilder = AlertDialog.Builder(this)
    val inflater = this.layoutInflater
    val dialogView = inflater.inflate(R.layout.custom_dialog, null)
    dialogBuilder.setView(dialogView)

    val editText = dialogView.findViewById<View>(R.id.editTextName) as EditText

    dialogBuilder.setTitle("Dialog Title")
    dialogBuilder.setMessage("Dialog Message")
    dialogBuilder.setPositiveButton("OK", DialogInterface.OnClickListener { dialog, whichButton ->
        //get what you need here!
    })
    dialogBuilder.setPositiveButton("Cancel", DialogInterface.OnClickListener { dialog, whichButton ->
        //get what you need here!
    })
    val b = dialogBuilder.create()
    b.show()
}
票数 1
EN

Stack Overflow用户

发布于 2018-05-21 04:36:39

当您单击任何按钮时,AlertDialog都会自动关闭,因此不需要编写dismiss()或cancel()。

我假设你显示了两次对话框,这就是为什么你认为它需要2次点击才能关闭。

下面是运行良好的代码:

代码语言:javascript
运行
复制
 private fun dialogCostPrice() {
    AlertDialog.Builder(this)
            .setTitle("Dialog Title")
            .setMessage("Dialog Message")
            .setPositiveButton("OK", { dialog, whichButton ->

            })
            .setNegativeButton("Cancel", { dialog, whichButton ->

            }).show()
}

是的,DialogInterface.OnClickListener在kotlin中是多余的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50429807

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档