我有一个非常简单CursorLoader
加载Cursor
。我将光标存储为活动中的字段。 (所以不在CursorAdapter
!)
public static class BundlesLoader extends CursorLoader {
public static final String[] PROJECTION = new String[]{
BaseColumns._ID,
TITLE,
SUBTITLE,
DESCRIPTION
};
public BundlesLoader(Context ctx) {
super(
ctx,
URI_BUNDLES,
PROJECTION,
null,
null,
POSITION + " ASC"
);
}
}
当我调用ContentResolver.notifyChange(URI_BUNDLES, null)
时,我希望CursorLoader重新加载,但事实并非如此。 (参见下面的LoaderCallbacks
;我记录回调。)
要调试此问题,我注册了一点ContentObserver
,其中 工作,奇怪的是:
getContentResolver().registerContentObserver(LegislationProvider.URI_BUNDLES,
false, new ContentObserver(new Handler()) {
@Override
public void onChange(boolean selfChange) {
Log.e("hello", "bundles changed!!!!!");
}
@Override
public void onChange(boolean selfChange, Uri uri) {
onChange(selfChange);
}
});
所以知道我不知道如何从这里调试。我的CursorLoader
初始化正常,我的ContentObserver
正常工作,但由于某种原因,当基础数据库发生更改时,CursorLoader
不会重新加载Cursor。什么可能是错的?
以下是我的LoaderCallbacks
:
@Override
public android.support.v4.content.Loader onCreateLoader(int id, Bundle bundle) {
switch (id) {
case LoaderIds.LOADER_BUNDLES:
d("Creating new bundles loader");
return new Model.Bundle.Loader(getApplicationContext());
default:
throw new IllegalArgumentException(
"Could not handle loader id " + id);
}
}
@Override
public void onLoadFinished(android.support.v4.content.Loader loader, Cursor cursor) {
switch (loader.getId()) {
case LoaderIds.LOADER_BUNDLES:
d("onLoadFinished: Bundles loaded with "
+ cursor.getCount() + " elements");
mMasterFragment.setBundlesCursor(cursor);
break;
default:
throw new IllegalArgumentException(
"Could not handle loader id " + loader.getId());
}
}
@Override
public void onLoaderReset(android.support.v4.content.Loader loader) {
switch (loader.getId()) {
case LoaderIds.LOADER_BUNDLES:
d("onLoaderReset: Clearing collection adapter");
mMasterFragment.setBundlesCursor(null);
break;
default:
throw new IllegalArgumentException(
"Could not handle loader id " + loader.getId());
}
}
答案 0 :(得分:1)
即使您使用setNotificationUri(getContentResolver(), URI_BUNDLES)
,仍需要在光标上调用CursorLoader
。如果你这样做,我不知道你的问题。