如果片段中已经打开了一个新的警报对话框,如何避免

时间:2018-10-24 02:45:45

标签: android kotlin

我正在处理这个片段,其中有两个编辑文本,当分别单击时会打开一个警报对话框。我一直在面对这样一个问题:当快速一遍又一遍地单击编辑文本时,它会打开两个警告对话框,一个又一个。有什么办法可以避免这种情况。

我尝试在<item name="android:splitMotionEvents">false</item>中使用AppTheme,也使用了solution,但是这些解决方案可以解决不同的情况。

任何指针都值得赞赏

4 个答案:

答案 0 :(得分:0)

单击第一个dir(Point) 后,您可以禁用另一个EditText,以便只能单击两个之一。对话框关闭时重新启用它。

    val input1 : EditText = findViewById(R.id.input1)
    val input2 : EditText = findViewById(R.id.input2)

    input1.setOnFocusChangeListener { _, b ->
        if(b)
        {
            input2.isEnabled = false
            AlertDialog.Builder(this).setTitle("input1").setMessage("input1").setNeutralButton("ok"){ _, _ ->
                input2.isEnabled = true
            }.create().show()
        }
    }
    input2.setOnFocusChangeListener { _, b ->
        if(b)
        {
            input1.isEnabled = false
            AlertDialog.Builder(this).setTitle("input2").setMessage("input2").setNeutralButton("ok"){ _, _ ->
                input1.isEnabled = true
            }.create().show()
        }
    }

答案 1 :(得分:0)

如果执行以下操作,则可以在此处使用solution

  • 将SafeClickListener设置为本地字段,而不是调用扩展名View.setSafeOnClickListener

    val safeClickListener = SafeClickListener { view -> when(view.id) { R.id.input1 -> // onClick event for input1 R.id.input2 -> // onClick event for input2 } }

  • 然后将这些视图的点击侦听器设置为使用相同的SafeClickListener实例:

    findViewById<View>(R.id.input1).setOnClickListener(safeClickListener) findViewById<View>(R.id.input2).setOnClickListener(safeClickListener)

通过这种方式,SafeClickListener中使用的间隔将防止在任何一个视图上发生快速的第二单击事件。

答案 2 :(得分:0)

可以使用多种方法来处理此方案。如果需要保持干净而不涉及任何布尔变量,请使用 isShowing()方法。

您可以参考以下代码段。

AlertDialog alert = new AlertDialog.Builder(context).create();

if (alert.isShowing()) {
    // don't do anything
}
else {
    // show dialog
}

答案 3 :(得分:0)

  

您可以使用isShowing()方法

  AlertDialog yourAlertDialog = new AlertDialog.Builder(getContext()).create();

    if(!yourAlertDialog.isShowing()){
        //Here you can show your dialog else not       
        yourAlertDialog.show()
    }

在KOTLIN中

 val alertDialog= activity?.let { AlertDialog.Builder(it).create() };

        if(!alertDialog?.isShowing!!){
            //Here you can show your dialog else not       
            alertDialog.show()
        }

如果您有两个或更多对话框,

  val alertDialog1= activity?.let { AlertDialog.Builder(it).create() };
     val alertDialog2= activity?.let { AlertDialog.Builder(it).create() };
     val alertDialog3= activity?.let { AlertDialog.Builder(it).create() };

 if(alertDialog1?.isShowing!! && alertDialog1?.isShowing!!){
               //Some dialog is shown
            }else{
               //Here you can show your dialog else not       
                alertDialog3.show()
              }