我显示了复选框对话框(从数据库检索到的列表)以允许用户选择要删除的行。因为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()
。
希望能有帮助!