我显示复选框对话框(从数据库中检索的列表)以允许用户选择删除哪些行。因为 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中刷新值(items,_selections)? 我尝试使 View 无效,希望强制 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
。由于您的示例中的“项目”看起来不像资源 ID,因此我假设它是 CharSequence[] 或 Cursor。如果您提供有关“项目”是什么的更多信息,我可以提供一个更具体的示例。
- 对于
CharSequence[]
(如 String[])数据,Builder
创建一个 ArrayAdapter 实例。 - 对于
Cursor
数据,Builder
创建一个 CursorAdapter
您需要在 AlertDialog 实例上使用 getListView().getAdapter()
获取对此 ListAdapter 的引用。
对于 Cursor,您可以在调用 requery()
更新数据集后调用 notifyDataSetChanged()
。
因为你不能用新数据“更新”数组(改变指向新实例的指针不是一回事......适配器指向的实例保持不变),这种情况有点多工作。您将需要调用适配器的 add()
、clear()
等方法来删除无效项并添加更新项。适配器数据集完全更新后,您现在可以调用 notifyDataSetChanged()
。
希望对您有所帮助!
关于android - 如何在onPrepareDialog 中实现setMultiChoiceItems 项的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4984214/