当我按下按钮时,我创建了一个警告对话框,其中包含一个基本的复选框列表。如果之前已经检查过项目,我希望能够检查用户的复选框。我通过像这样操纵“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,以便检查正确的名称?
有什么我不会压倒或适应的吗?我在这里不知所措。
谢谢!
答案 0 :(得分:1)
我能够通过在填充列表视图之前设置一个延迟来解决这个问题:
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() { //code to manipulate goes here
}}, 100);
这基本上使它等待100毫秒,这似乎是将对话框信息加载到列表视图中的足够时间。有没有人知道更有效的方法呢?