2010-11-06 57 views
1

我有一个显示复选框列表的对话框。每次打开时应检查哪些框来自编辑文本。我搜索了一种不允许缓存对话框的方法,但无法找到如何做到这一点。现在我重写onPrepareDialog以在对话框打开前设置复选框。我删除了我的edittext的内容,打开对话框,仍然检查了相同的框...任何人都可以告诉我如何重置复选框?无法在onPrepareDialog中设置复选框状态

@Override 
    protected void onPrepareDialog(int id, Dialog dialog) { 
     ListView lv = ((AlertDialog) dialog).getListView(); 

     if (lv == null) 
      return; 

     boolean[] checked = cbDialog.setAndGetCheckedArray(); 

     String s = "onPrepareDialog... checked="; 
     for (int i=0; i<checked.length; i++) 
      s+="["+i+"="+checked[i]+"]"; 
     System.out.println(s); 

      // if edittext is empty, all entries in checked[] are false here, 
      // but these changes do NOT affect the checkboxes in the dialog: 
     for (int i=0; i<checked.length; i++) 
      if (checked[i]) 
       lv.setItemChecked(i, true); 
      else 
       lv.setItemChecked(i, false); 
    } 

回答

1

好了,我终于找到了如何解决这个问题,也许它可以帮助任何人:

我发现(因为内部缓存机制)出它可能是最好不要打电话如果动态修改对话框的内容,则在活动中使用showDialog()并使用onCreateDialog()创建对话框。

相反,我创建了一个扩展了AlertDialog.Builder的类。我实现了一个像“showCustomDialog()”的方法,我调用.setTitle ...,.setMultiChoiceItems(),最后show()。我的自定义AlertDialog.Builder的这种方法我可以在我的活动中使用,并且一切都按预期工作;)

1

似乎应该避免托管对话框('showDialog','onCreateDialog'等)的普遍共识如果内容需要更改为不同的实例。特别是,在API级别1.8之前或之后的“onPrepareDialog”没有任何用处。

另一个例子是:Question 954726