所以我试图让AlertDialog确认点击“从数据库中删除”按钮。已经尝试了相当长的时间,无法获得工作模型。我目前的代码如下。
在类的顶部有一个布尔
private static boolean dialogResult;
显示对话框的方法
private void showErrorDialog(String title, String message){
AlertDialog.Builder builder = new AlertDialog.Builder(this)
.setTitle(title)
.setMessage(message)
.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Activity.setDialogResult(true);
dialog.dismiss();
}
})
.setNegativeButton(R.string.cancel,new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Activity.setDialogResult(false);
dialog.dismiss();
}
});
AlertDialog alert = builder.create();
alert.show();
}
其中setDialogResult(bool)只设置上述类变量。
按下“删除”按钮时,此代码执行:
setDialogResult(false);
//Find which list is to be deleted
RadioButton selectedBtn=(RadioButton)findViewById(group.getCheckedRadioButtonId());
String currentSelectedListName=selectedBtn.getText().toString();
if(!currentSelectedListName.equals("All")){//check if the list is the default
showErrorDialog("","Delete: "+currentSelectedListName+" ?");
if(dialogResult){
mDbHelper.deleteFGList(currentSelectedListName);
this.populateRadioGroupFromDb();
}
} else{//if it is the default (That is, the name of the list is "All") tell user of error
showErrorDialog("Delete Error","The default list cannot be deleted");
}
//}
感谢帮助!
编辑:抱歉,忘记提及我遇到的错误。在警告对话框中单击“确定”时,它不会从数据库中删除该项目。不知何故,它正在跳过布尔检查。您可以看到我在该代码段的开头将布尔值设置为false。如果它被删除,那么你按下“删除”按钮,对话框中的确定按钮,然后没有任何反应。如果再次按“删除”按钮,则会自动删除此新选择而不进行对话框检查。基本上,那些onClick方法搞砸了,我希望有更好的方法来做到这一点。我读过一些关于使用接口的内容吗?所以似乎人们一直在暗示这种方法
if(!currentSelectedListName.equals("All")){//check if the list is the default
AlertDialog.Builder builder = new AlertDialog.Builder(this)
.setTitle("")
.setMessage("Delete: "+currentSelectedListName+" ?")
.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
mDbHelper.deleteFGList(currentSelectedListName);
Activity.populateRadioGroupFromDb();
}
})
.setNegativeButton(R.string.cancel,null);
AlertDialog alert = builder.create();
alert.show();
} else{//if it is the default (That is, the name of the list is "All") tell user of error
showErrorDialog("Delete Error","The default list cannot be deleted");
}
问题是eclipse在
上给出了编译错误mDbHelper.deleteFGList(currentSelectedListName);
Activity.populateRadioGroupFromDb();
1.Cannot引用在不同的内部类中定义的非final变量currentSelectedListName 方法 2.无法从MyFGCardsActivity类型中对非静态方法populateRadioGroupFromDb()进行静态引用
这是主张的做法还是我误解?
答案 0 :(得分:1)
Android对话框不是设计模态的。也就是说,他们不会阻止你的代码执行,直到被解雇,但{{1}}将立即返回。因此,当您编写如下代码时:
show()
showErrorDialog("","Delete: "+currentSelectedListName+" ?");
if(dialogResult){
尚不可用。
现在你提到一些关于“接口”的东西,这是解决方案的一部分。你应该分配回调,例如正负按钮,做你想要的。这些回调是根据Java接口实现的。实际上你已经有了这样的回调接口:dialogResult
。
因此,在正面按钮的侦听器中放置应该在正面点击时运行的任何代码,例如删除代码,并在相应的侦听器中放置应该在负面点击时运行的任何代码,例如没有。并且摆脱DialogInterface.OnClickListener
变量以及可能的任何促进这种编码风格的教程(使用静态类变量来获取本地状态信息)。
在这里调用dialogResult
侦听器中的dismiss()
是多余的:当您像这样分配侦听器时,当侦听器运行时,对话框将被解除。
答案 1 :(得分:0)
在setPositiveButton中调用这两行
mDbHelper.deleteFGList(currentSelectedListName);
this.populateRadioGroupFromDb();
由于