3

フラグメントを使用してタブレット向けに最適化されたアプリケーションを作成しています。左側に薄いナビゲーションフラグメントがあり、画面の残りの部分を占める2つのViewGroupコンテナーにロードされるフラグメントを制御するボタンがあります。

たとえば、ナビゲーションフラグメントのボタンを押すと、最初のコンテナにアイテムリストフラグメント(設定、顧客など)が読み込まれ、2番目のコンテナにフラグメントが読み込まれてアイテムの詳細が表示されます。

フラグメントをメモリに保持したいので(つまり、[設定]から[顧客]に移動してから[設定]に戻るとき、ユーザーが以前の場所を失うことがないように、以前の設定フラグメントがそこにあるはずです)-フラグメントインスタンスを作成しましたアクティビティの変数

SettingsListFragment settingsListFragment;
SettingsDetailFragment settingsDetailFragment;
CustomerListFragment customerListFragment;
CustomerDetailFragment customerDetailFragment;

次に、必要に応じてこれらのフラグメントを作成し、必要に応じてコンテナーをフラグメントに置き換えます。例えば。

FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
if(settingsListFragment == null){
   settingsListFragment = new SettingsListFragment();
}           

fragmentTransaction.replace(R.id.fragment_container_left, settingsListFragment);
fragmentTransaction.commit();

私の質問は、向きを変えてもこれらのインスタンスを保持するにはどうすればよいですか?

http://developer.android.com/resources/articles/faster-screen-orientation-change.htmlに従って、アクティビティonRetainNonConfigurationInstance()メソッドを使用するべきではないと想定してい ます。 onRetainNonConfigurationChange()をパススルーします...これは、ビュー、ドローアブル、アダプターなどを絶対に渡してはならないことを意味します。」

また、フラグメントマネージャからフラグメントを取得しようとしましたが、 Fragment clf = fragmentManager.findFragmentByTag("CLIENT LIST"); nullとして返されます。フラグメントが置き換えられた後にリリースされると思います。

ヘルプ/アドバイスをありがとう。

4

3 に答える 3

3

そのようにフラグメントを保持することはできません(または実際に保持するべきではありません)。そのままにしておきたい状態だと思います。

状態をに保存するonSaveInstanceState()と、後でonCreate()またはで取得できますonActivityCreate()。したがって、戻った後(バックスタックにを追加する必要がありFragmentTransactionます)、保存したバンドルから状態を復元できます。

FragmentManager構成の変更を処理し、現在のビューでフラグメントを復元します。

于 2012-06-05T07:14:27.717 に答える
3

Android にオブジェクトを再描画させることをお勧めします。向きの変更に関するデータを保持したい場合は、それらをサービス コンポーネントに保持する必要があります。こうすることで、向きが変わってもデータが失われることはありません。

そうでなければ、いつでもこれを行うことができます:

これをマニフェストに入れます

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

これをアクティビティクラスに入れます

@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}

このメソッドを使用すると、アクティビティは再描画されないため、横向きまたは縦向きの別の XML レイアウト ファイルを使用している場合、レイアウトは調整されません。

于 2012-06-05T07:18:27.683 に答える
1

FragmentManager#putFragmentもう1つ、保存されているフラグメント参照をとで取得できますFragmentManager#getFragment

于 2012-08-22T04:41:09.167 に答える