116

複数のローダーがある場合に正しいカーソルを取得する方法は明確ではありません。次のように 2 つの異なるローダーを定義するとします。

getLoaderManager().initLoader(0,null,this);
getLoaderManager().initLoader(1,null,this);

次にonCreateLoader()で、ID に応じてさまざまなことを行います。

@Override
public Loader<Cursor> onCreateLoader(int id, Bundle arg1) {

    if (id==0){
               CursorLoader loader = new CursorLoader(getActivity(),
            MaterialContentProvider.CONTENT_URI,null,null,null,null);
    }else{
               CursorLoader loader = new CursorLoader(getActivity(),
            CustomerContentProvider.CONTENT_URI,null,null,null,null);
            };
    return loader;
} 

ここまでは順調ですね。ただし、正しい Cursoradapter の正しい Cursor を識別するための ID を取得できないため、 onLoadFinished()で正しいカーソルを取得する方法。

@Override
public void onLoadFinished(Loader<Cursor> arg0, Cursor cursor) {


    mycursoradapter1.swapCursor(cursor);
    if(isResumed()){
        setListShown(true);
    }else {
        setListShownNoAnimation(true);
    }



}
//and where to get the cursor for mycursoradapter2

または私は間違っていますか?これは、1 つのフラグメントで 2 つの異なるカーソルアダプターの結果を取得する間違った方法です。

4

3 に答える 3

120

Loader クラスにはgetId()というメソッドがあります。ローダーに関連付けた ID が返されることを願っています。

于 2011-10-31T17:45:19.263 に答える
32

Loader のgetId()メソッドを使用します。

@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
    switch (loader.getId()) {
        case 0:
            // do some stuff here
            break;
        case 1:
            // do some other stuff here
            break;
        case 2:
            // do some more stuff here
            break;
        default:
            break;
    }
}    
于 2014-01-23T19:39:10.090 に答える
8

ローダーに結果のクラス タイプ (ここでは: ) 以外に共通点がない場合は、Cursor2 つの別個のLoaderCallbacksインスタンス (単にアクティビティ/フラグメントの 2 つの内部クラス) を作成し、それぞれを 1 つのローダー処理専用にする方がよいでしょう。リンゴとオレンジを混ぜようとするよりも。

あなたの場合、データ ソースと結果の処理の両方が異なるようです。そのため、現在のシナリオを識別して適切なコード ブロックにディスパッチするために、追加のボイラープレート コードを記述する必要があります。

于 2014-04-20T00:54:54.520 に答える