2012-01-27 3 views
11

I'have 1 FragmentActivity с ViewPager, который обрабатывает 2 фрагмента.Android - Фрагмент экрана вращается

public class MyFragmentActivity extends 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); } }

Моя проблема заключается в том, что каждый раз при изменении ориентации экрана, активность создается, а также фрагментов. Я не возражаю, если действие создано снова, но я не хочу, чтобы Фрагменты были воссозданы.

+0

Я нашел решение [здесь] (http://stackoverflow.com/questions/7951730/viewpager-and-fragments-whats-the-right-way-to-store-fragments-state) Благодаря @ oneilse14 для вашего ответ в любом случае. – gutiory

ответ

0

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

+0

@ oneilse12. Спасибо. Но с помощью функции FragmentActivity невозможно переопределить метод onRetainNonConfigurationInstance. – gutiory

13

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

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

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

2

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

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

+8

Не могу поверить, что эти ответы все еще размещены здесь. Лучше взгляните на это: http://cyrilmottier.com/2014/09/25/deep-dive-into-android-state-restoration/ – dumazy

Смежные вопросы