2010-11-06 59 views
1

我有一個顯示覆選框列表的對話框。每次打開時應檢查哪些框來自編輯文本。我搜索了一種不允許緩存對話框的方法,但無法找到如何做到這一點。現在我重寫onPrepareDialog以在對話框打開前設置複選框。我刪除了我的edittext的內容,打開對話框,仍然檢查了相同的框...任何人都可以告訴我如何重置複選框?無法在onPrepareDialog中設置複選框狀態

@Override 
    protected void onPrepareDialog(int id, Dialog dialog) { 
     ListView lv = ((AlertDialog) dialog).getListView(); 

     if (lv == null) 
      return; 

     boolean[] checked = cbDialog.setAndGetCheckedArray(); 

     String s = "onPrepareDialog... checked="; 
     for (int i=0; i<checked.length; i++) 
      s+="["+i+"="+checked[i]+"]"; 
     System.out.println(s); 

      // if edittext is empty, all entries in checked[] are false here, 
      // but these changes do NOT affect the checkboxes in the dialog: 
     for (int i=0; i<checked.length; i++) 
      if (checked[i]) 
       lv.setItemChecked(i, true); 
      else 
       lv.setItemChecked(i, false); 
    } 

回答

1

好了,我終於找到了如何解決這個問題,也許它可以幫助任何人:

我發現(因爲內部緩存機制)出它可能是最好不要打電話如果動態修改對話框的內容,則在活動中使用showDialog()並使用onCreateDialog()創建對話框。

相反,我創建了一個擴展了AlertDialog.Builder的類。我實現了一個像「showCustomDialog()」的方法,我調用.setTitle ...,.setMultiChoiceItems(),最後show()。我的自定義AlertDialog.Builder的這種方法我可以在我的活動中使用,並且一切都按預期工作;)

1

似乎應該避免託管對話框('showDialog','onCreateDialog'等)的普遍共識如果內容需要更改爲不同的實例。特別是,在API級別1.8之前或之後的「onPrepareDialog」沒有任何用處。

另一個例子是:Question 954726