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
、基になるデータベースが変更されたときにカーソルをリロードしません。何が間違っている可能性がありますか?
これが私のもの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());
}
}