Java AlertDialog返回布尔值

Java AlertDialog返回布尔值,java,android,Java,Android,我试图在一个方法中包含一个AlertDialog builder,该方法提示输入pin码,当按下肯定按钮时,将其与数据库值进行检查,并将true或false值返回给方法调用方 例如:添加/编辑/删除用户任务需要pin码。我不想为这三个(或更多)操作生成不同的AlertDialog。我想将以下代码封装在一个TaskService类中,我可以从任何活动调用该类,并根据该活动中的结果做出反应 因此TaskService.java将具有: public boolean isCorrectPin(View

我试图在一个方法中包含一个AlertDialog builder,该方法提示输入pin码,当按下肯定按钮时,将其与数据库值进行检查,并将true或false值返回给方法调用方

例如:添加/编辑/删除用户任务需要pin码。我不想为这三个(或更多)操作生成不同的AlertDialog。我想将以下代码封装在一个TaskService类中,我可以从任何活动调用该类,并根据该活动中的结果做出反应

因此TaskService.java将具有:

public boolean isCorrectPin(View v){
    AlertDialog.Builder builder = new AlertDialog.Builder(v.getContext());

    final EditText editText = new EditText(context);
    builder.setView(editText);

    builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            if (editText.getText().toString()) == getPinCode(){
                //return true
            }
        }
    });

    builder.show();
}
和OpenTaskAdapter.java将具有:

public void onBindViewHolder(ViewHolder holder, int position){
    holder.btnMarkAsComplete.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v){
            if (service.isCorrectPin(v) {
                //complete task
            }
        }
    });
    holder.btnDelete.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v){
            if (service.isCorrectPin(v) {
                //delete task
            }
        }
    });
需要注意的是,这两个按钮侦听器可能处于完全不同的活动中。

对话框不能以您期望的方式“返回”值。对话框可以对其他对象进行更改,但不能有一点代码块并等待用户完成与它的交互


相反,您需要设置监听器,以便在提示对话框打开、按钮打开或单击时,或任何其他事件信号显示您从中获得所需的信息时使用监听器。然后,这些侦听器可以读取对话框收集和设置的数据。

您可以创建自己的方法来生成带有侦听器的对话框:

public void isCorrectPin(Context context, String title, String message, String btnPositive, final DialogSingleButtonListener dialogSingleButtonListener) {
    final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(context);
    dialogBuilder.setTitle(title);
    dialogBuilder.setMessage(message);
    dialogBuilder.setPositiveButton(btnPositive, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            if (editText.getText().toString() == getPinCode()){
                dialogSingleButtonListener.onButtonClicked(dialog);
            }
        }
    });

    AlertDialog dialog = dialogBuilder.create();
    dialog.show();
}
和listener类:

public interface DialogSingleButtonListener {   
    public abstract void onButtonClicked(DialogInterface dialog); 
}
然后像这样使用它:

service.isCorrectPin(context, title, message, btnPositive
       new DialogSingleButtonListener() {
                @Override
                public void onButtonClicked(DialogInterface dialog) {
                     //code here is only called if they entered a correct pin.
                }
       }

);

我就是这样做的:

  public Boolean showAlert(String message)
{
    action = false;

    AlertDialog.Builder alertDialog = new AlertDialog.Builder(HAActivity.this);

    // Setting Dialog Title
    alertDialog.setTitle(getString(R.string.app_name));

    // Setting Dialog Message
    alertDialog.setMessage(message);

    // Setting Icon to Dialog

    // Setting Positive "Yes" Button
    alertDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog,int which) {

            // Write your code here to invoke YES event
            action = true;
        }
    });

    // Setting Negative "NO" Button
    alertDialog.setNegativeButton("Cancle", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
            // Write your code here to invoke NO event
            action = false;
            dialog.cancel();
        }
    });

    // Showing Alert Message
    alertDialog.show();

    return action;
}
调用如下函数: //创建函数的活动

 if (Activity.showAlert("Do you really want to delete ??"))
            {
               //delete it anyway.

            }

这对我有用,谢谢。我提交了一个编辑,其中包含了一些针对我的问题的代码,因为我花了几分钟的时间才弄清楚代码的作用。这是不正确的,因为它总是返回FalseError,甚至在用户选择之前也会返回值