我正在尝试在提示输入密码的方法中包含一个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
}
}
});
值得注意的是,这两个按钮听众可能处于完全不同的活动中。
答案 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.
}