使用時に少しトラブルに見舞われAsyncTaskLoader
、画面の向きが変わります。私のアプリがどのように構成されているかについて、いくつかのコンテキストを説明しましょう。URLから結果を取得して表示する、非常にシンプルなアプリがあります。アプリは1つとFragmentActivity
3つで構成されていFragments
ます。私の3つのフラグメントは次のとおりです。
- 最初のフラグメントは、編集テキストと入力を送信するためのボタンです。
- 2番目のフラグメントはローディングスピナーを示しています
- 3番目のフラグメントは、結果を表示するためにデータがフェッチされるときに、loadingフラグメントを置き換えます。
はAsyncTaskLoader
、コンテンツプロバイダー(キャッシュされている場合)またはネットワークからデータをロードするために使用されます。
画面の構成が変わるまで、すべてがうまく機能します。の出力を確認しましたLoaderManager.enableDebugLogging(true)
が、問題の原因はLoaderCallbacks.onLoadFinished
、アクティビティで呼び出されないことであるようです。
ローダーを起動するコードの一部を次に示します。
/* This function is defined in the "first" fragment in an interface and
* implemented in the activity */
@Override
public void onFormSubmission(String word) {
showLoadingFragment();
if ( mWord == null || mWord.equals(word) ) {
getSupportLoaderManager().initLoader(0, word, this);
} else {
getSupportLoaderManager().restartLoader(0, word, this);
}
// Store the word
mWord = word;
}
結果を表示するコード:
@Override
public void onLoadFinished(Loader<Bundle> loader, Bundle data) {
// Validation and other stuff
ResultFragment fragment = new ResultFragment();
// Add the fragment to the 'result_fragment_container' FrameLayout
getSupportFragmentManager()
.beginTransaction()
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out)
// Replace loading fragment with the result
.replace(R.id.result_fragment_container, fragment)
.commitAllowingStateLoss();
}
私が試したが失敗したアプローチ:
setRetaininstance(true)
フラグメントで設定します。android:configChanges="orientation|keyboardHidden|keyboard"
マニフェストに設定します。
私はアイデアがないので、助けていただければ幸いです。