如何在onPrepareDialog中实现setMultiChoiceItems项值?

Hru*_*out 7 android dialog

我显示了复选框的对话框(从DB检索的列表)以允许用户选择,删除哪些行.因为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();
Run Code Online (Sandbox Code Playgroud)

如何在onPrepareDialog中刷新值(项目,_selections)?我尝试了无效的视图,希望强制android加载项目againg(不要既不工作),但我认为它的错误选择以及删除对话框和重新创建.

protected void onPrepareDialog(final int id, final Dialog dialog) {
          switch (id) {
          case REMOVE_DIALOG_ID:

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

          break;
          }
Run Code Online (Sandbox Code Playgroud)

谢谢你的任何想法!

Dev*_*red 6

当您使用创建项目列表时AlertDialog.Builder,它会在内部接受并创建一个ListAdapater取决于您传递的数据类型的项目列表.由于示例中的"items"看起来不像资源ID,我假设它是CharSequence []或Cursor.如果您提供有关"项目"的更多信息,我可以提供一个更具体的示例.

  • 对于CharSequence[](如String [])数据,Builder创建一个ArrayAdapter实例.
  • 对于Cursor数据,Builder创建一个CursorAdapter

您需要getListView().getAdapter()在AlertDialog实例上使用此ListAdapter的引用.

对于Cursor,您可以在调用更新数据集notifyDataSetChanged()后逃脱调用requery().

由于你无法用新数据"更新"数组(将指针更改为新实例并不是同一件事......适配器指向的实例保持不变),这种情况需要多做一些工作.您将需要调用add(),clear()等等适配器删除无效项,并添加更新的人的方法.随着适配器数据集的完全更新,您现在可以调用notifyDataSetChanged().

希望有帮助!