2012-04-08 12 views
0

私のアプリケーションは、フラグメントを使用して、ポートレートモードのListView、またはリストビューと横並びモードの横並びの「詳細」ビューを表示します。 AsyncTaskを起動するActionBarのメニュー項目もあります。問題はAsyncTaskの実行中にユーザーが表示を縦向きから横向きに(またはその逆に)回転させると、AsyncTaskが強制終了されることです。停止からAsyncTaskを修正するには、私はconfigChangesがAndroidManifestに属性を追加:AsyncTaskを使用したフラグメント切り替え

<activity android:name="ListingFragment" android:configChanges="keyboardHidden|orientation" /> 

しかし、その属性を追加すると、自動的に横長/縦長表示に切り替えるから破片を防ぐことができます。 AsyncTaskを強制終了せずにフラグメントが自動的にビューを切り替える方法はありますか?

答えて

1

アクティビティが強制終了される前に、asynctaskのインスタンスを保存する必要があります。 onRetainCustomNonConfigurationInstance()を使用して保存することができます。あなたの作成時には、getLastCustomNonConfigurationInstance()を使用して検索することができます。その後、あなたのonCreateであなたの活動をasynctaskに再び "アタッチ"することができます。

+0

私はonRetainCustomNonConfigurationInstance()が推奨されなくなり、ドキュメントがsetRetainInstance()を使用すると言います。 –

+0

これは別の目的のためのものです。 Fragmentインスタンスがそのアクティビティで破棄されないことを意味する 'setRetainInstance(true)'を呼び出すと、それは保持され(渡されます)、新しいアクティビティは新しいフラグメントを作成する代わりにこのフラグメントを取得します。 'onRetain ...'は廃止されましたが、アクティビティdestroy-createサイクルを通してオブジェクトのインスタンスを保持する別の方法を提供していることはわかりません。 – dmon

+0

お役立ち情報その後、onRetainCustomNonConfigurationInstance()を使用します。レスポンスありがとう。 –

関連する問題