AlertDialog返回布尔值

时间:2016-02-12 01:35:48

标签: java android

我正在尝试在提示输入密码的方法中包含一个AlertDialog构建器,当按下肯定按钮时,会根据数据库值对其进行检查,并向方法调用者返回true或false值。

例如:添加/编辑/删除用户任务需要密码。我不想为这三个(或更多)这些操作生成不同的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
            }
        }
    });

值得注意的是,这两个按钮听众可能处于完全不同的活动中。

3 个答案:

答案 0 :(得分:2)

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

相反,您需要在提示对话框为dismissed或按钮或单击时设置侦听器,或者为您提供所需的任何其他事件信号。然后,这些听众可以读取对话框收集和设置的数据。

答案 1 :(得分:1)

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

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();
}

听众类:

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.
                }
       }

);

答案 2 :(得分:0)

这就是我的做法:

  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.

            }