複数のローダーがある場合、正しいカーソルを取得する方法はわかりません。次の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つの異なるカーソルアダプターの結果を取得するための間違った方法です。
これは本当に良い質問です!それはよく尋ねられており、かなり微妙な問題に触れています。非常に具体的です。
—
Kurtis Nusbaum、2011年
ローダーの戻り値の型がすべてのローダーで同じでない場合は、別のハンドラークラスを使用する必要があることに注意してください。ジェネリック型の消去のため、Javaでは
—
Matthias
LoaderCallbacks
複数のインターフェース(この場合)を実装できません。タイプ。どちらの場合も結果はであるため、これは単にあなたのケースで機能しますCursor
。
@マティアスグレートあなたはそれを言及しました!戻り値の型が異なる2つのローダーを使用する方法を検討しています。では、2つの異なる戻り値の型を持つ2つのローダーの場合はどうでしょうか。1つのローダーで1つのタスクを実行し、代わりにスレッドで別のタスクを実行しますか?
—
ロバート
@Robertスレッドを使用する必要はありません。2つ
—
AnV
Loader
のを使用できます。このstackoverflow.com/a/20839825/2818583