2016-02-12 140 views
1

我想在一个提示输入pin码的方法中包含一个AlertDialog构建器,并且当按下肯定按钮时,按照数据库值检查它,并向方法调用者返回true或false值。AlertDialog返回布尔值

例如:添加/编辑/删除用户任务需要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 
      } 
     } 
    }); 

需要注意的是这两个按钮的听众可以在完全不同的活动是很重要的。

回答

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

); 
+0

这为我工作, 谢谢。我用一些更具体的问题提交了编辑,因为我花了几分钟的时间来确定代码的功能。 –

2

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

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