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

标签 android listview checkbox android-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);
            }
        }
    }
}

这工作正常,除了我第一次选择该按钮。它只会向我显示未选择任何内容的 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/

相关文章:

java - Sqlite 不会保存添加的数据

c# - Listview后台绘制问题C# Winform

android - 启动时空白页

android - 为什么IDE显示: parameter type mismatch: array is not assignable

android - 缺少虚拟析构函数内存效应

php - 在 PHP 中动态检查来自 MySQL 的动态复选框

Asp.Net Mvc 复选框列表

android - 将 EditText View 动态插入 Listview 时,虚拟键盘不会打开

android - 向 ListView 添加第二个过滤器

jquery - 为什么在禁用和检查时检查和禁用 Prop 返回 false?