我显示了复选框的对话框(从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)
谢谢你的任何想法!
当您使用创建项目列表时AlertDialog.Builder,它会在内部接受并创建一个ListAdapater取决于您传递的数据类型的项目列表.由于示例中的"items"看起来不像资源ID,我假设它是CharSequence []或Cursor.如果您提供有关"项目"的更多信息,我可以提供一个更具体的示例.
CharSequence[](如String [])数据,Builder创建一个ArrayAdapter实例.Cursor数据,Builder创建一个CursorAdapter您需要getListView().getAdapter()在AlertDialog实例上使用此ListAdapter的引用.
对于Cursor,您可以在调用更新数据集notifyDataSetChanged()后逃脱调用requery().
由于你无法用新数据"更新"数组(将指针更改为新实例并不是同一件事......适配器指向的实例保持不变),这种情况需要多做一些工作.您将需要调用add(),clear()等等适配器删除无效项,并添加更新的人的方法.随着适配器数据集的完全更新,您现在可以调用notifyDataSetChanged().
希望有帮助!
| 归档时间: |
|
| 查看次数: |
7518 次 |
| 最近记录: |