3

何時間も試しましたが、これを達成できませんでした。バンドル経由、静的変数経由、if ステートメント経由で送信しようとしましたが、何も機能しませんでした。

ユーザーがメニュー項目をクリックすると、ローダーにさまざまなデータセットをロードさせたい状況があります。これは、notifyChange を受け取ったらクエリを変更する必要があることを意味します。コードは、次のような非常に標準的なローダー コードです。

@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
    String query = args.getString("query");

    String[] projection = { DbCreate.ID, DbCreate.COL_ITEM, DbCreate.COL_STATUS, DbCreate.COL_SYNCED,
            DbCreate.COL_PRIORITY, DbCreate.COL_COMPLETEBY, DbCreate.COL_TAG, DbCreate.COL_ASSIGNED, DbCreate.COL_SHARED};

    CursorLoader cursorLoader = new CursorLoader(getActivity(),
            DbProvider.CONTENT_URI_DATA, projection, query, null, "priority DESC, status ASC, _id DESC");

    return cursorLoader;
}

この onCreate メソッド内でも通常の if(...) ステートメントを試しましたが、うまくいきません。これは、notifyChange が既に作成されたオブジェクトをトリガーするだけであることを意味します。では、notifyChange に新しい「クエリ」値を挿入するにはどうすればよいでしょうか。

4

2 に答える 2

9

私は自分のコードで同じことをしています。データを変更したい場合は、カーソルローダーを再度再起動する必要があります。通知はカーソルローダーではなくアダプターで動作します

@Override
    public Loader<Cursor> onCreateLoader(int id, Bundle arg1) {
        // This is called when a new Loader needs to be created. 
        // Now create and return a CursorLoader that will take care of
        // creating a Cursor for the data being displayed.
        Uri contentUri = MyContentProvider.CONTENT_URI_FACEBOOK;
        switch (id) {
        case FACEBOOK:
            contentUri = MyContentProvider.CONTENT_URI_FACEBOOK;
            break;
        case LINKEDIN:
            contentUri = MyContentProvider.CONTENT_URI_LINKEDIN;
            break;
        }

        return new CursorLoader(getActivity(), contentUri, null, null, null,
                null);

    }

さまざまなクエリに対して、私はこのようにしています

getLoaderManager().restartLoader(FACEBOOK, null, Profile.this);
getLoaderManager().restartLoader(LINKEDIN, null, Profile.this);

したがって、ローダーを再起動するだけです

于 2013-10-01T06:06:20.007 に答える
0

私があなたの問題を正しく理解していれば、notifyChange を介してデータセットを変更しようとすることを心配する必要はないでしょう。おそらく、新しいローダーを単純に起動したい(または既存のローダーを強制的にリロードしたい)と思います。ローダーがロードの完了時にアダプターを設定するようにすると、データセットで通知が発生します。

IE ユーザーがメニューをクリックすると、新しいクエリ パラメータやその他の情報でローダーが起動されます。ローダーがすでに実行されている場合は、それをキャンセルして新しいものを開始することができます。

于 2013-07-20T00:00:22.683 に答える