2012-01-27 23 views
11

Dispongo de 1 FragmentActivity con un ViewPager que maneja 2 Fragments.Android - Pantalla de fragmento girar

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); } }

Mi problema es que cada vez que cambia la orientación de la pantalla, se crea la actividad y también los fragmentos. No me importa si la actividad se crea de nuevo, pero no quiero que se vuelvan a crear los Fragmentos.

+0

Encontré la solución [aquí] (http://stackoverflow.com/questions/7951730/viewpager-and-fragments-whats-the-right-way-to-store-fragments-state) Gracias @ oneilse14 por su respuesta de todos modos. – gutiory

Respuesta

0

Guarde su FragmentAdapter en onSaveInstanceState y regréselo a la actividad después de un cambio de configuración con onRetainNonConfigurationInstance para que los fragmentos sobrevivan a un cambio de orientación.

+0

@ oneilse12. Gracias. Pero con una FragmentActivity no es posible anular el método de la instancia de RetainNonConfiguration. – gutiory

13

La manera más fácil es lanzar una declaración if justo después de llamar al método on create y verificar si ya tiene algo ahí. Si savedInstanceState no es nulo, no necesita hacer nada:

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

(esta respuesta es más para las personas que tropiezan con esta pregunta porque no pueden entender por qué fragmentos consiguen volver a agregar cada vez que se convertir su dispositivo)

2

Se podría añadir: android:configChanges="screenSize|orientation" En AndroidManifest.xml.

Esto evitará que Android llame a onCreate al cambiar la orientación de la pantalla. Si desea realizar un manejo especial del cambio de orientación, puede anular onConfigurationChanges.

+8

No puedo creer que estas respuestas todavía se publiquen aquí. Mejor echarle un vistazo a esto: http://cyrilmottier.com/2014/09/25/deep-dive-into-android-state-restoration/ – dumazy