我创建了一个警告对话框,当我按下一个按钮时,其中有一个基本的复选框列表。如果之前已经检查过这些项目,我希望能够为用户检查复选框。我通过像这样操作“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);
}
}
}
}
这工作正常,除了我第一次选择该按钮。它只会向我显示未选择任何内容的 list 。如果我取消并再次点击它,我将看到检查的正确名称。我已尝试追踪 ListView 子项计数,但第一次显示为 0。
是否有任何解决办法,以便第一次出现警报对话框时它实际上填充了 ListView ,以便我可以检查正确的名称?
有什么我没有覆盖或调整的吗?我在这里不知所措。
谢谢!
最佳答案
好吧,我可以通过在填充 ListView 之前延迟发布来解决这个问题:
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() { //code to manipulate goes here
}}, 100);
这基本上让它等待 100 毫秒,这似乎足以让对话框信息加载到 ListView 中。有谁知道更有效的方法吗?
关于android - onPrepareDialog ListView 未在第一个警报对话框创建时填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7403496/