从Android AlertDialog函数返回布尔值

时间:2014-02-11 15:24:59

标签: android android-alertdialog

在我的应用程序中,我有一个功能,可以使用输入文本检查显示的AlertDialog中输入的文本。如果文本等于字符串变量,则返回True,否则返回False,并捕获此结果值以继续条件代码。

但这似乎有点困难,因为我在其他帖子中读到了如何解决同样的问题。

我已经这样做了:

private boolean checkAdministratorPassword() {
   final enterPasswordResult[0] = false;

    AlertDialog.Builder alert = new AlertDialog.Builder(mContext);
    alert.setTitle("Confirm action");
    alert.setIcon(R.drawable.ic_launcher);
    alert.setMessage("Enter administrator pass to continue");

    final EditText input = new EditText(mContext);
    input.setPadding(5, 0, 5, 0);
    alert.setView(input);

    alert.setPositiveButton("Accept", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {

            String strPass = input.getEditableText().toString();
            if (strPass.length() == 0) {
                dialog.cancel();
            }
            if (strPass.equalsIgnoreCase(Constantes.ADMIN_PASS)) {
                enterPasswordResult[0] = true;
                dialog.cancel();

            } else {
                Toast.makeText(mContext, "Invalid pass..!!", Toast.LENGTH_LONG).show();
                dialog.cancel();
            }
        }
    });
    alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
            dialog.cancel();
        }
    });
    AlertDialog alertDialog = alert.create();
    alertDialog.show();

    return enterPasswordResult[0];
    }

我用这种方式调用函数:

If ( checkAdministratorPassword() == True ){
  //true conditions
}

但问题是检查函数不会等待结果继续使用代码,它只会自行继续,我不会得到合适的行为。

2 个答案:

答案 0 :(得分:1)

问题是您正在尝试在程序的logcal流程中处理异步事件。如果您创建Dialog它自己的类并使用Interface回调您的主机活动,则可以执行此操作。查看DialogFragment上的文档。

public interface PasswordCheckListener{
    public void valid(boolean check);
}

private static class PasswordDialog extends DialogFragment {

    private PasswordCheckListener listener;

    public static PaswordDialog newInstance(PasswordCheckListener listener){
        this.listener = listener;
    }       

    @Override    
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        //Put your dialog creation code here
    }

    private checkAdminPassword(){
        //Whatever your check passowrd code is
        listener.valid(result);
    }
}

我意识到我没有为你实现所有代码,但这是一般的想法。通过使用界面,您可以在用户输入密码并按提交时回叫主持人ActivityFragment。然后,您可以在事件发生时处理事件,而不必在程序流程中处理它。

答案 1 :(得分:0)

谢谢大家的回答!!我找到了通过创建一个活动主题“Theme.Dialog”,输入文本和两个按钮(接受,取消)来实现此问题的正确方法,我开始此活动的结果要求用户输入管理员传递给继续,检查字符串,然后再次返回上一个活动的onActivityResult()并使用正确的信息继续。