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);
}
}
Моя проблема в том, что каждый раз, когда меняется ориентация экрана, создается действие, а также фрагменты. Я не возражаю, если действие создано снова, но я не хочу, чтобы Фрагменты были воссозданы.
Ответы
Ответ 1
Самый простой способ - запустить оператор if
сразу после вызова метода create и проверить, есть ли у вас что-то там. Если savedInstanceState
не является нулевым, вам ничего не нужно делать:
if (savedInstanceState == null){
// do whatever
} else {
// dont do anything
}
(этот ответ больше для людей, которые спотыкаются на этот вопрос, потому что они не могут понять, почему фрагменты получают повторное добавление каждый раз, когда они поворачивают свое устройство)
Ответ 2
Вы можете добавить:
android:configChanges="screenSize|orientation"
В AndroidManifest.xml
.
Это позволит запретить Android-телефону onCreate
изменить ориентацию экрана. Если вы хотите выполнить специальную обработку изменения ориентации, вы можете переопределить onConfigurationChanges
.
Ответ 3
Сохраните свой FragmentAdapter в onSaveInstanceState и верните его в Activity после изменения конфигурации с помощью onRetainNonConfigurationInstance, чтобы фрагменты выдержали изменение ориентации.