我显示了复选框对话框(从数据库检索到的列表)以允许用户选择要删除的行。因为android对话框缓存,我需要刷新计数和复选框的名称。
在我的oncreatedialog中:

dialog =  new AlertDialog.Builder( this )
       .setTitle( "Remove Items" )
       .setMultiChoiceItems( items, _selections, new OnMultiChoiceClickListener(){public void onClick (DialogInterface dialog, int which, boolean isChecked){}} )
       .setPositiveButton("Smazat", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {
            dialog.dismiss();
            deleteRow(_selections);
            } })
        .setNegativeButton("Storno", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {
            dialog.dismiss();
            } })
       .create();

如何刷新onPrepareDialog中的值(项和选项)?
我试图使视图无效,希望迫使android重新加载项(两者都不起作用),但我认为这是一个错误的选择,以及删除对话框和重新创建。
protected void onPrepareDialog(final int id, final Dialog dialog) {
          switch (id) {
          case REMOVE_DIALOG_ID:

              ListView lv = ((AlertDialog) dialog).getListView();
                lv.invalidateViews();

          break;
          }

谢谢你的意见!

最佳答案

当您使用AlertDialog.Builder创建项目列表时,它会在内部接受该列表并创建一个ListAdapater,该列表取决于您传递的数据类型。由于示例中的“items”看起来不像资源id,所以我假设它是charsequence[]或游标。如果你提供更多关于什么是“项目”的信息,我可以提供一个更具体的例子。
对于CharSequence[](类似于string[])数据,Builder创建arrayadapter实例。
对于Cursor数据,Builder创建cursoradapter
您需要在AlertDialog实例上使用getListView().getAdapter()获取对此ListAdapter的引用。
对于游标,在调用notifyDataSetChanged()以更新数据集之后,可以不必调用requery()
由于不能用新数据“更新”数组(更改指向新实例的指针不是同一件事……适配器指向的实例保持不变),因此这种情况需要做更多的工作。您需要调用适配器的add()clear()等方法来删除无效项并添加更新项。在适配器数据集完全更新后,现在可以调用notifyDataSetChanged()
希望能有帮助!

07-26 09:37