我正在处理这个片段,其中有两个编辑文本,当分别单击时会打开一个警报对话框。我一直在面对这样一个问题:当快速一遍又一遍地单击编辑文本时,它会打开两个警告对话框,一个又一个。有什么办法可以避免这种情况。
我尝试在<item name="android:splitMotionEvents">false</item>
中使用AppTheme
,也使用了solution,但是这些解决方案可以解决不同的情况。
任何指针都值得赞赏
答案 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()
}