AlertDialog返回布尔值
问题描述:
我想在一个提示输入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
}
}
});
需要注意的是这两个按钮的听众可以在完全不同的活动是很重要的。
答
您可以创建自己的方法来生成与听众对话:
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.
}
}
);
答
对话框无法以您期望的方式“返回”值。一个对话框可以对其他对象进行更改,但不能对其进行一点代码阻塞,并等待用户完成与其交互。
相反,您需要为提示对话框为dismissed或按钮或单击时设置侦听器,或者您需要从中获取所需的任何其他事件信号。那些听众可以读取由对话框收集和设置的数据。
这为我工作, 谢谢。我用一些更具体的问题提交了编辑,因为我花了几分钟的时间来确定代码的功能。 –