web-dev-qa-db-ja.com

複数のローダーを備えたLoaderManager:適切なカーソルローダーを取得する方法

私には、複数のローダーがある場合に正しいカーソルを取得する方法が明確ではありません。次の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;
} 

ここまでは順調ですね。ただし、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つの異なるカーソルアダプタの結果を取得する間違った方法です。

116
Kay Gladen

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

119
Kurtis Nusbaum

ローダーの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;
    }
}    
32
IgorGanapolsky

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

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

8
BladeCoder