【发布时间】:2015-07-18 10:16:53
【问题描述】:
我正在使用 LoaderManager 和 CursorLoader 以异步方式将数据从我的 ContentProvider 加载到 GUI。一切正常。但是我想知道一旦 ContentProvider 的内容发生了变化,如何重新启动加载器?据我研究,CursorLoader 应该自动执行此操作,但在我的情况下它不会!那么,我应该注册一个内容观察者并重新启动 LoaderManager 吗?
注意: ContentProvider 已正确实现。例如,如果插入了一个新项目,我将使用主 URI 和新插入项目的 URI 调用 ContentProvider.notifyChange(...)。对于 ContentObservers 这工作正常。
public class MyFragment implements LoaderManager.LoaderCallbacks<Cursor> {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_sample, container, false);
getLoaderManager().initLoader(1, null, this);
return view;
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
if (isDetached())
return null;
Uri queryUri = MyContentProvider.CONTENT_URI;
String[] projection = this.getProjection();
String selection = null;
String[] selectionArgs = null;
String sortOrder = null;
return new CursorLoader(getActivity(), queryUri, projection, selection, selectionArgs, sortOrder);
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
// ToDo: display the content (in this case it's not a ListView but a Google Map with markers)
// Remark: I'm using the data/cursor only, but I'm not holding the loader!
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
// ToDo: clear/remove all markers from the map
}
}
【问题讨论】:
标签: android android-contentprovider android-cursorloader contentobserver