2011-09-13 29 views
2

我創建了一個警報對話框,當我按下一個按鈕時,它有一個基本的複選框列表。如果之前已經檢查過這些項目,我希望能夠檢查用戶的複選框。我已經通過操作「onPrepareDialog」像這樣做到了這一點:onPrepareDialog ListView不填充第一個警報對話框創建

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


    if (lv == null){ 
     return; 
    } 

    String[] names = Utility.convertStringToArr(currentTravelers, ", "); 
    for(int i = 0;i < lv.getChildCount();i++){ 

     for(int j = 0;j< names.length;j++){ 
      String tn = lv.getItemAtPosition(i).toString(); 
      if(tn.equalsIgnoreCase(names[j])){ 
       lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 
       lv.setItemChecked(i, true); 
      } 
     } 
    } 
} 

這工作得很好,除了我第一次選擇的按鈕。它只顯示沒有選中任何項目的清單。如果我取消並再次點擊,我會看到選中的正確名稱。我試過追查ListView的子數,並且它第一次出現爲0。

反正有這樣的情況,所以第一次出現警告對話框時,它實際上會填充listview,所以我可以檢查正確的名稱嗎?

有沒有我不重寫或適應?我在這裏不知所措。

謝謝!

+0

你試過onCreateDialog(int id)嗎? – eric2323223

+0

你如何建議我使用它來解決這個問題? – Nick

回答

1

嗯,我是能夠通過將後延來解決這個問題它填充ListView控件之前:

Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() { 
    public void run() { //code to manipulate goes here 
}}, 100); 

基本上,這使得它等待100毫秒,這似乎是足夠的時間進行對話的信息加載進入列表視圖。有沒有人知道這樣做的更有效的方法?