无法正确获取AlertDialog响应,因为应用程序继续执行

时间:2014-05-15 02:53:28

标签: android android-alertdialog

在我的Activity中,我调用一个显示警告对话框的方法,并根据点击AlertDialog和其他检查的按钮返回响应(此方法在另一个类中)

类似的东西:

 public static boolean showAlertDialog(Context c,int param){
...
AlertDialog.Builder alert = new AlertDialog.Builder(con);
        alert.setTitle(title);
        alert.setIcon(android.R.drawable.ic_dialog_info);
        alert.setMessage(message);
        alert.setPositiveButton(R.string.yes,
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog,
                                        int whichButton) {
                        ...
                    }
                }


           );

        ....
        alert.show();
        return status;

    }

问题在于,当我调用此方法时,代码不会等待用户在AlertDialog上执行操作,但会继续执行。

所以,如果在我的活动中

boolean status=false;
status=Alerts.showAlertDialog(this);

if(status){
   //do this
}
else{
  //do that
}

始终执行else块

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

您可以使用EventBus。这将允许您从AlertDialog发布一个事件,您可以在任意数量的片段或活动中处理该事件。

答案 1 :(得分:0)

最简单的部分实际上是在Android版开发人员指南中Dialogs tutorial中描述的。

这很简单:你必须在Activity的一侧(implements NoticeDialogFragment.NoticeDialogListener)实现一个接口并覆盖回调方法

@Override
public void onDialogPositiveClick(DialogFragment dialog) {
    // User touched the dialog's positive button
    ...
}

@Override
public void onDialogNegativeClick(DialogFragment dialog) {
    // User touched the dialog's negative button
    ...
}

我给出的示例使用的DialogFragment不完全符合您的代码。但是,实现与您没有什么不同,您只需要查找相应的接口(例如OnDismissListener

你目前有这个:

boolean status=false;
status=Alerts.showAlertDialog(this);

if(status){
   //do this
}
else{
  //do that
}

你必须消除整个if。更改您的活动,以便它实现DialogInterface.OnClickListener接口

public class Blah extends Activity implements DialogInterface.OnClickListener

并添加方法

public void onClick(DialogInterface dialog, int which){
   if (which==DialogInterface.BUTTON_POSITIVE){
        //TODO: do your stuff
   }
}

最后,在Alerts.showDialog()方法更改

 alert.setPositiveButton(R.string.yes,
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog,
                                    int whichButton) {
                    ...
                }
            }


       );

 alert.setPositiveButton(R.string.yes,c);

如果你有一个EditText,我必须假设你使用了AlertDialog documentation Class Overview中描述的技术。如果是这样,由于您正在接收对话框作为参数,您必须在对话框中找到findViewById的视图并以此方式提取值。