在我的应用程序中,spinne显示活动项目(我使用Loader of support library来加载它们)。微调器的init工作正常,它只显示活动项。
但是我遇到了以下问题: 当我编辑另一个活动中的项目并存储它们(激活并取消激活其中一些)时,返回(后退按钮),然后我在旋转器中看到“旧”项目列表。适配器使用正确的数据获取新游标,但微调器不刷新其列表。
如何更新微调器列表?
在onCreate()
中我初始化Spinner
_ItemSpinner = (Spinner) getView().findViewById(R.id.spn_itemss);
_ItemAdapter = new AdvancedCursorAdapter(
getActivity(),
R.layout.spinner_2line_item,
null, _ColumnList, _ColumnViews, 0);
_ItemSpinner.setAdapter(_ItemAdapter);
在onResume()
中,我开始加载器初始化
@Override
public void onResume() {
getLoaderManager().initLoader(1, null, this);
super.onStart();
}
在onLoadFinished(Loader<Cursor> loader, Cursor data)
中,我将光标交换为适配器
_ItemAdapter.swapCursor(data);
答案 0 :(得分:3)
您可以调用适配器的notifyDataSetChanged
方法
答案 1 :(得分:0)
最后我发现了,不是为什么,而是哪个元素 销毁 刷新微调器。
我使用同一ContentProvider的两个不同的URI来更新所有项目并仅显示活动项目
如果我使用相同的URI进行更新和显示(使用所需的活动过滤器),则会更新微调器列表。如果我使用不同的URI,则微调器会显示 旧 数据。
我不明白这种行为(光标返回正确数量的项目,但是微调器并不关心),但我有一个可行的方法。
存储数据:
getActivity().getContentResolver().update(
RecordsContentProvider.CONTENT_URI_ITEMS,
_Changes,
COLUMN_ID + " =?",
new String[] { String.valueOf(_ID) });
之前(获取数据) - 不起作用:
CursorLoader curLoader = new CursorLoader(this.getActivity(),
RecordsContentProvider.CONTENT_URI_ACTIVE_ITEMS,
_ITEMS_PROJECTION,
null, null, null);
之后(获取数据) - 工作:
CursorLoader curLoader = new CursorLoader(this.getActivity(),
RecordsContentProvider.CONTENT_URI_ITEMS,
_ITEMS_PROJECTION,
COLUMN_IS_ACTIVE + " =1", null, null);
如果基础notifyDataSetChanged
为您执行此操作,则不需要 ContentProvider
:( getContext().getContentResolver().notifyChange(uri, null);
)
答案 2 :(得分:0)
你试过了吗?
getLoaderManager().restartLoader(0, null, this);
在您的活动中,只需在对数据库进行更改后。