2011-09-13 12 views
2

ボタンを押すと、基本的なチェックボックスリストが表示されます。以前にアイテムがチェックされている場合は、そのユーザーのチェックボックスをオンにしたいと考えています。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); 
      } 
     } 
    } 
} 

これは私がボタンを選択し、非常に最初の時間を除いて、正常に動作します:私はそうのような「onPrepareDialog」を操作することによって、これを達成しました。何も選択されていないチェックリストが表示されます。キャンセルしてもう一度押すと、正しい名前が確認されます。 ListViewの子カウントをトレースしてみましたが、最初は0になりました。

アラートダイアログが表示されるのは実際にリストビューに表示されるので、正しい名前を確認できます。

オーバーライドしたり適応したりしていないことはありますか?私はここで紛失している。

ありがとうございます!

+0

あなたはcreateDialog(int id)を試しましたか? – eric2323223

+0

この問題を解決するためにどのように使用することをお勧めしますか? – Nick

答えて

1

まあ、私はそれがリストビューを移入する前にポストの遅れを置くことによってこの問題を回避することができました:

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

この基本的には、ダイアログ情報をロードするのに十分な時間であるように思われ、100ミリ秒を待ってますリストビューに追加します。誰もがこれを行うより効率的な方法を知っていますか?

関連する問題