web-dev-qa-db-ja.com

Android-フラグメント画面が回転します

2つのフラグメントを処理するViewPagerを持つ1つのFragmentActivityがあります。


パブリッククラスMyFragmentActivityはFragmentActivityを拡張します{ private Fragment f1; private Fragment f2; private ViewPager myPager; private MyFragmentAdapter mFragmentsAdapter; private static ArrayAdapter<Fragment> mFragmentArray; public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.my_layout); myViewPager = (ViewPager) findViewById(R.id.pager_acciones); mFragmentArray = new ArrayAdapter<Fragment>(getApplicationContext(),Android.R.layout.simple_list_item_1); f1 = new Fragment(); f1 = new Fragment(); mFragmentArray.add(f1); mFragmentArray.add(f2); mFragmentsAdapter = new MyFragmentAdapter(getSupportFragmentManager()); myPager.setAdapter(mFragmentsAdapter); myPartidoPager.setCurrentItem(0); } public static class MyFragmentAdapter extends FragmentPagerAdapter { public AccionesFragmentAdapter(FragmentManager fm) { super(fm); } @Override public int getCount() { return mFragmentArray.getCount(); } @Override public Fragment getItem(int position) { return mFragmentArray.getItem(position); } }

私の問題は、画面の向きが変わるたびに、アクティビティとフラグメントが作成されることです。アクティビティが再度作成されてもかまいませんが、フラグメントを再作成したくありません。

12
gutiory

最も簡単な方法は、oncreateメソッドが呼び出された直後にifステートメントをスローし、そこにすでに何かがあるかどうかを確認することです。 savedInstanceStateがnullでない場合は、何もする必要はありません。

if (savedInstanceState == null){
  // do whatever 
} else {
  // dont do anything
}

(この回答は、デバイスを回すたびにフラグメントが再度追加される理由を理解できないため、この質問に遭遇した人向けです)

14
PSchuette

追加できます:Android:configChanges="screenSize|orientation" In AndroidManifest.xml

これにより、画面の向きの変更時にAndroidがonCreateを呼び出すのを防ぐことができます。向きの変更の特別な処理を実行する場合は、onConfigurationChangesをオーバーライドできます。

2
Herve Thu

FragmentAdapterをonSaveInstanceStateに保存し、onRetainNonConfigurationInstanceを使用して構成を変更した後、アクティビティに戻します。これにより、フラグメントは方向の変更後も存続します。

0
SeanPONeil