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