Android - поворот экрана фрагмента

У меня есть 1 FragmentActivity с ViewPager, который обрабатывает 2 фрагмента.

открытый класс 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); } }

My problem is that every time the screen orientation changes, the activity is created and also the Fragments. I don't mind if the activity is created again, but I don't want the Fragments to be recreated.


person gutiory    schedule 27.01.2012    source источник
comment
Я нашел решение здесь Спасибо. @oneilse14 oneilse14 в любом случае за твой ответ.   -  person gutiory    schedule 29.01.2012


Ответы (3)


Самый простой способ — запустить оператор if сразу после вызова метода on create и проверить, есть ли у вас уже что-то там. Если savedInstanceState не равно нулю, вам не нужно ничего делать:

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

(этот ответ больше для людей, которые натыкаются на этот вопрос, потому что они не могут понять, почему фрагменты повторно добавляются каждый раз, когда они поворачивают свое устройство)

person PSchuette    schedule 26.10.2012

Вы можете добавить: android:configChanges="screenSize|orientation" В AndroidManifest.xml.

Это предотвратит вызов Android onCreate при изменении ориентации экрана. Если вы хотите выполнить специальную обработку изменения ориентации, вы можете переопределить onConfigurationChanges.

person Herve Thu    schedule 18.02.2013
comment
Не могу поверить, что эти ответы все еще публикуются здесь. Лучше взгляните на это: cyrilmottier.com/ 25.09.2014/ - person dumazy; 03.04.2015
comment
Один из наиболее существенных недостатков этого подхода заключается в том, что без вызова onCreate Android не сможет загрузить разные макеты для альбомной и вертикальной ориентации. - person Bob Cram; 18.09.2019

Сохраните свой FragmentAdapter в onSaveInstanceState и верните его в Activity после изменения конфигурации с помощью onRetainNonConfigurationInstance, чтобы фрагменты выдержали изменение ориентации.

person SeanPONeil    schedule 27.01.2012
comment
@oneilse12. Спасибо. Но с FragmentActivity невозможно переопределить метод onRetainNonConfigurationInstance. - person gutiory; 29.01.2012