2010-10-30 162 views
2

我有一個顯示覆選框列表的對話框。每次顯示對話框時,我想設置不同的框。但是這隻能在第一次使用。我希望每次顯示對話框時都能使用它!這將是巨大的,如果任何人都可以幫助...爲複選框列表對話框設置複選框

這是我的代碼:

@Override 
protected Dialog onCreateDialog(int id) { 
    switch (id) { 

      case CHECKBOX_LIST_DIALOG: 

       final CharSequence[] weeks = new CharSequence[53]; 

       for (int i=0; i<=52; i++) { 
        weeks[i] = String.valueOf(i+1); 
       } 

       return new AlertDialog.Builder(this).setTitle(
         R.string.txt_week_checkbox_list).setMultiChoiceItems(
         weeks, getCheckedBoxes(), 
         new DialogInterface.OnMultiChoiceClickListener() { 
          public void onClick(DialogInterface dialog, int whichButton, boolean isChecked) { 
           checked[whichButton] = isChecked; 
          } 
         }).setPositiveButton("OK", 
         new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, int whichButton) { 
           EditText editText = (EditText) findViewById(R.id.edittext_weeks); 
           editText.setText(generateString()); 
          } 
         }).setNegativeButton("Cancel", 
         new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, 
            int whichButton) { 
          } 
         }).create(); 
} 

回答

3

通過onCreateDialog()創建的託管對話框緩存。您將需要覆蓋onPrepareDialog(),以便在下次顯示對話框時獲得控制權。您通過Dialog對象。將其轉換爲AlertDialog,請致電getListView(),並使用setItemChecked()開啓或關閉每個複選框。

0

太棒了!這樣做,謝謝!這正是我正在尋找的:-) 下面是我所做的工作,就像你解釋的那樣:

@Override 
protected void onPrepareDialog(int id, Dialog dialog) { 
    ListView lv = ((AlertDialog) dialog).getListView(); 
    boolean[] checked = myDialog.getCheckedBoxes(); 
    for (int i=0; i<checked.length; i++) 
     if (checked[i]) 
      lv.setItemChecked(i, true); 
}