Така че се опитвам да накарам 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");
}
//}
Оценявайте помощта!
Редактиране: съжалявам, забравих да спомена грешката, която имах. Когато натиснете OK в диалоговия прозорец за предупреждение, това не изтрива елемента от базата данни. По някакъв начин се прескача тази булева проверка. Можете да видите, че зададох стойността на boolean на 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. Не може да препраща към не-крайна променлива currentSelectedListName във вътрешен клас, дефиниран в различен метод 2. Не може да прави статична препратка към нестатичния метод populateRadioGroupFromDb() от типа MyFGCardsActivity
Това ли е препоръчваният подход или аз не разбирам?