onPrepareDialog ListView未在第一个警报对话框创建时填充

时间:2011-09-13 14:25:56

标签: android listview checkbox alertdialog

当我按下按钮时,我创建了一个警告对话框,其中包含一个基本的复选框列表。如果之前已经检查过项目,我希望能够检查用户的复选框。我通过像这样操纵“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子计数,它第一次出现为0。

是否还有这个,所以第一次出现警报对话框时,它实际填充了listview,以便检查正确的名称?

有什么我不会压倒或适应的吗?我在这里不知所措。

谢谢!

1 个答案:

答案 0 :(得分:1)

我能够通过在填充列表视图之前设置一个延迟来解决这个问题:

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

这基本上使它等待100毫秒,这似乎是将对话框信息加载到列表视图中的足够时间。有没有人知道更有效的方法呢?