onPrepareDialog ListView не заполняется при первом создании диалога оповещения - PullRequest
2 голосов
/ 13 сентября 2011

Я создаю диалоговое окно предупреждения, в котором есть основной список флажков, когда я нажимаю кнопку. Если элементы были проверены ранее, я хочу иметь возможность установить флажки для пользователя. Я сделал это, манипулируя "onPrepareDialog", например, так:

@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, и в первый раз оно достигает нуля.

Есть ли что-нибудь подобное, чтобы при первом появлении диалогового окна с предупреждением оно фактически заполняло список, чтобы я мог проверить правильные имена?

Есть что-то, что я не переопределяю или не адаптирую? Я в недоумении.

Спасибо!

1 Ответ

1 голос
/ 10 октября 2011

Ну, я смог обойти это, поставив почтовую задержку до заполнения списка:

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

Это в основном заставляет его ждать 100 миллисекунд, что, по-видимому, достаточно времени для загрузки информации диалога в просмотр списка. Кто-нибудь знает более эффективный способ сделать это?

...