AsyncTaskLoaderにいくつかの問題があります。ローダーを再起動しようとしたときに、それらが関連しているかどうかは不明です。私のアプリケーションでは、1つのシングルトンのLoaderManagerによって管理されるカスタムAsyncTaskLoaderの3つのインスタンスによってバックアップされたカスタムCursorAdapterのインスタンスが3つあります。問題は、二つのdifferenctアダプタ/ローダ対に関連するが、使用されるコードは、いずれの場合にも同様である。カスタムAsyncTaskLoaderコールバックの問題
getLoaderManager().restartLoader(loaderId, bundle, loaderManager);
問題1:私はrestartLoader(呼び出し)とLoaderManagerが1つonCreateLoaderへの呼び出しを登録しなくonLoaderReset()。 LoaderはdeliverResult()に到達しますが、onLoadFinished()は呼び出されません。 Loaderには、 'reset'フラグも 'started'フラグもありません(下記のコードを参照)。
問題2:私はrestartLoader()を呼び出し、LoaderManagerはonLoaderReset()の呼び出しを登録します。 LoaderはonReset()に到達しますが、それ以上は取得されません。 Cursorはnullに設定されていますが、新しいCursorはロードされません。
どのような問題が発生する可能性がありますか?カーソルを作成し、データベースでそれをポイントすると、あなたは、
@Override
public Loader<Cursor> onCreateLoader(int loaderId, Bundle bundle) {
return new CustomCursorLoader();
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
cursorAdapter.changeCursor(cursor);
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
cursorAdapter.changeCursor(null);
}
1.ええ、私はその名前が明らかではないことを知っています、ごめんなさい。 2.もうシングルトンではありません。その部分で作業していました。 3.主な問題は、同じローダーで同じカーソルを別のアクティビティに結びつけることです。 – Pikaling
なぜあなたはカーソルを共有したいですか?ローダーはアクティビティー/フラグメントによって管理されるため、別のアクティビティーが終了するとローダーがクローズする可能性があります。同じLoader _class_を使用し、異なるアクティビティ/フラグメントでインスタンス化することができます。 –
ご協力ありがとうございます。私はすべてのコードを書き直して、すべて作業しています。時には私はOOPが嫌い... – Pikaling