私には、複数のローダーがある場合に正しいカーソルを取得する方法が明確ではありません。次の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つの異なるカーソルアダプタの結果を取得する間違った方法です。
Loaderクラスには getId() というメソッドがあります。これにより、ローダーに関連付けたIDが返されることを期待します。
ローダーの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;
}
}
ローダーに結果のクラスタイプ以外の共通点がない場合(ここではCursor
)、2つの別個のLoaderCallbacks
インスタンスを作成する方がよいでしょう(単にActivity /の2つの内部クラスとしてフラグメント)、リンゴとオレンジを混ぜようとするのではなく、それぞれが1つのローダートリートメント専用です。
あなたの場合、データソースと結果の処理の両方が異なるようです。そのため、現在のシナリオを特定し、適切なコードブロックにディスパッチするために追加の定型コードを記述する必要があります。