按下按钮时,Dialog不会触发解除侦听器

时间:2018-06-12 14:20:45

标签: android listener android-dialog

我想向用户显示一个ok取消对话框,我想知道是否按下ok,取消,或者如果他选择通过点击屏幕上的其他地方或按回按钮来解除对话框。

    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
    final EditText input = new EditText(MainActivity.this);
    builder.setView(input);
    builder.setPositiveButton("OK", new DialogInterface.OnClickListener()
    {
        @Override
        public void onClick(DialogInterface dialog, int which)
        {
            // ok stuff
        }
    });
    builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener()
    {
        @Override
        public void onClick(DialogInterface dialog, int which)
        {
            // cancel stuff
        }
    });
    builder.setOnDismissListener(new DialogInterface.OnDismissListener()
    {
        @Override
        public void onDismiss(DialogInterface dialog)
        {
            //dismiss stuff
        }
    });
    builder.show();

这里的问题是,每当用户按下ok按钮时,会立即触发解除侦听器。如果用户按下按钮,有没有办法不触发解除侦听器?

我意识到我可以使用布尔标志,但我希望实际上有一个优雅的解决方案。

我不是在寻找如何防止对话被解雇的解决方案。我正在寻找有关如何防止在按下确定按钮并且对话框被解除时触发侦听侦听器的解决方案。

4 个答案:

答案 0 :(得分:1)

setOnDismissListener()将因任何原因而被调用。这意味着如果由于按下确定/取消按钮或屏幕触摸或后退按钮或按下主页按钮,对话框将从屏幕上消失,将调用setOnDismissListener()

  

设置解除对话框时将调用的回调   任何原因。

     

如果您有兴趣收听对话框所在的所有情况   被解雇,而不仅仅是取消时,请参阅setOnDismissListener

所以解决它你所提到的,检查使用一些布尔标志并处理它。

答案 1 :(得分:0)

您可以尝试使用CustomViewDialog

LayoutInflater myDialog = getLayoutInflater();
        
View convertView = (View) myDialog.inflate(R.layout.MyLayoutXmlFile, null);

也不要使用positivenegative按钮,而只使用对话框布局中的按钮。

答案 2 :(得分:0)

您可以在关闭后再次显示该对话框!

答案 3 :(得分:0)

我认为您需要的是 setOnCancelListener()