在Android中使用AlertDialog确认删除

时间:2013-12-22 05:02:32

标签: android database alertdialog confirm

所以我试图让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()进行静态引用

这是主张的做法还是我误解?

2 个答案:

答案 0 :(得分:1)

Android对话框不是设计模态的。也就是说,他们不会阻止你的代码执行,直到被解雇,但{​​{1}}将立即返回。因此,当您编写如下代码时:

show()

showErrorDialog("","Delete: "+currentSelectedListName+" ?"); if(dialogResult){ 尚不可用。

现在你提到一些关于“接口”的东西,这是解决方案的一部分。你应该分配回调,例如正负按钮,做你想要的。这些回调是根据Java接口实现的。实际上你已经有了这样的回调接口:dialogResult

因此,在正面按钮的侦听器中放置应该在正面点击时运行的任何代码,例如删除代码,并在相应的侦听器中放置应该在负面点击时运行的任何代码,例如没有。并且摆脱DialogInterface.OnClickListener变量以及可能的任何促进这种编码风格的教程(使用静态类变量来获取本地状态信息)。

在这里调用dialogResult侦听器中的dismiss()是多余的:当您像这样分配侦听器时,当侦听器运行时,对话框将被解除。

答案 1 :(得分:0)

在setPositiveButton中调用这两行

mDbHelper.deleteFGList(currentSelectedListName);
this.populateRadioGroupFromDb();

由于