【问题标题】:Return Boolean value from Android AlertDialog function从 Android AlertDialog 函数返回布尔值
【发布时间】:2014-02-11 15:24:59
【问题描述】:

在我的应用程序中,我有一个功能可以检查来自显示的 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
}

但问题是检查功能不会等待结果继续执行代码,它只是自行继续,我没有得到适当的行为。

【问题讨论】:

  • “If”和“True”是复制/粘贴错误,还是在您的代码中确实如此?
  • checkAdministratorPassword(new Runnable(){ public void run() { /*code for true*/ }}, new Runnable(){ public void run() { /*code for false*/ }}) ... checkAdministratorPassword(Runnable trueCode, Runnable falseCode) 在警报的 onClick 中执行 trueCode.run(); 如果密码正常,falseCode.run(); 如果不是
  • 这是一个关于你的应用程序结构的问题:我认为最好在正按钮 onClick 监听器中调用所需的函数
  • @codeMagic:是的,它只是一个复制/粘贴错误。在我的代码中,我正确地使用了“if”和“true”。谢谢你-
  • 你可以试试这个解决方案检查一下here

标签: android android-alertdialog


【解决方案1】:

问题是您正在尝试处理程序逻辑流中的异步事件。如果您将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。然后,您可以在事件发生时处理它,而不必在程序流中处理它。

【讨论】:

    【解决方案2】:

    谢谢大家的回答!!我找到了解决此问题的正确方法,方法是创建一个带有主题“Theme.Dialog”的活动、一个输入文本和两个按钮(接受、取消),我开始此活动以获取结果,要求用户输入管理员密码继续,检查字符串,然后使用正确的信息从先前的活动再次返回到 onActivityResult() 以继续。

    【讨论】:

      猜你喜欢
      • 2013-03-11
      • 2017-06-07
      • 2011-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-05
      • 2012-02-03
      • 1970-01-01
      相关资源
      最近更新 更多