0

そう..

私が持っているのは次のとおりです。私のアクティビティでタブホストなどを利用する複雑なフラグメントベースのビューページャーです。これが基本的なセットアップです。

これが作成されたら、AsyncTask を使用してデータベースからデータを取得します。ASyncTask が完了したら、fragmentmanager を使用してビューページャーのそれぞれのフラグメントを見つけ、データを設定する各フラグメント内の関数を呼び出します。たとえば、フラグメント A ではデータがリスト アダプター内のリストとして設定され、フラグメント B ではデータがマップ上にプロットされます。

すべてのフラグメントが同じデータを使用するため、このように設定しました。1 つの ASyncTask を呼び出すだけで済みます。それは完全に機能します。

私の問題は、ユーザーが読み込み中に画面を回転させたときです。そのため、フラグメントから ASyncTask を呼び出すと、setRetainInstance を使用でき、以前はアクティビティ内で onRetainNoneConfigurationInstance.. を使用できましたが、現在は非推奨です。

私は何年も検索してきましたが、誰もこの特定の状況に対する答えを持っていないようです..

誰でもアドバイスできますか?

4

2 に答える 2

2

目に見えないものを使用して、Fragment状態を保持できます。基本的には と同じonRetainNoneConfigurationInstanceですが、非推奨ではありません。

http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html#config-changesを参照してください

この例にはバグがあり、RetainFragment を に追加する必要がありますFragmentManager。そうしないと、復元されません。

public static RetainFragment findOrCreateRetainFragment(FragmentManager fm) {
    RetainFragment fragment = (RetainFragment) fm.findFragmentByTag(TAG);
    if (fragment == null) {
        fragment = new RetainFragment();
        fm.beginTransaction().add(fragment, TAG).commit(); // add this
    }
    return fragment;
}
于 2012-12-20T17:46:05.080 に答える
0

IntentServiceを使用してデータベースからデータを取得すると、構成の変更について心配する必要がなくなります。インテントを送信してデータを取得し、LocalBroadcastManagerを使用して、通知する他のコンポーネントにブロードキャストインテントを送り返します。

于 2012-12-20T18:53:35.497 に答える