2013-12-22 93 views
0

所以我試圖讓AlertDialog確認點擊'從數據庫中刪除'按鈕。一直在嘗試相當長的時間,無法獲得工作模式。我目前的代碼如下。在Android中使用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(布爾)只設置上述的類變量。當 '刪除' 按鈕,按下此代碼

執行:

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"); 
      } 
     //} 

感謝幫助!

編輯:抱歉,忘記提及我遇到的錯誤。當您在提示對話框中點擊確定時,它不會從數據庫中刪除該項目。不知怎的,它跳過布爾檢查。你可以看到我在該代碼片段的開始處將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"); 
      } 

問題是,日食給出

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

1.Cannot指非最終變量currentSelectedListName一個內部類中的編譯錯誤在不同的 方法中定義 2.無法對類型爲MyFGCardsActivity的非靜態方法populateRadioGroupFromDb()進行靜態引用

這是主張的方法還是我誤解?

+0

什麼是錯誤? –

+0

你面臨什麼問題?顯示的對話框是? – Chandrashekhar

回答

0

呼叫這兩行setPositiveButton

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

感謝

+0

不幸的是,setPositiveButton中的OnClick方法被認爲是在不同的類中,所以currentSelectedListName不會被傳遞,而ActivityClass.populateRadioGroupFromDb();由於靜態,非靜態問題而無法工作。嘗試這一個已經 – ReluctantTurtle

1

Android的對話框未設計模式的。也就是說,他們不會阻止你的代碼執行直到解散,但show()將立即返回。因此,當你編寫這樣的代碼:

showErrorDialog("","Delete: "+currentSelectedListName+" ?"); 
if(dialogResult){ 

dialogResult尚未公佈。

現在你提到一些關於「接口」的東西,這是解決方案的一部分。您應該指定回叫,例如到正確和負面的按鈕,做你想做的事情。這些回調是通過Java接口實現的。您實際上已經有了這樣的回調接口:DialogInterface.OnClickListener

因此,在肯定按鈕上的聽衆中正確點擊時應該運行任何代碼。刪除代碼,並在該相應的監聽器中放置應該在負面點擊中運行的任何代碼,例如沒有。擺脫dialogResult變量以及可能的任何促進這種編碼風格的教程(使用靜態類變量來獲取本地狀態信息)。

在這個onClick()監聽器中調用dismiss()是多餘的:當你指定這樣的監聽器時,當你的監聽器運行時,這個對話框將被解除。

+0

我同意dialogResult方法是一個壞的方法,只是我能找到的最好的方法。我編輯我原來的帖子,是你的意思?我沒有太多的經驗來創建可用的界面,所以現在真的很確定我會怎麼做 – ReluctantTurtle