0

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());
        }
    }
4

1 に答える 1