2012-01-27 9 views
11

I'have 1 FragmentAttività con un ViewPager che gestisce 2 frammenti.Android - Lo schermo del frammento ruota

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

Il mio problema è che ogni volta che cambia l'orientamento dello schermo, viene creata l'attività e anche i frammenti. Non mi interessa se l'attività viene creata di nuovo, ma non voglio che i Frammenti vengano ricreati.

+0

Ho trovato la soluzione [qui] (http://stackoverflow.com/questions/7951730/viewpager-and-fragments-whats-the-right-way-to-store-fragments-state) Grazie a @ oneilse14 per il tuo rispondi comunque. – gutiory

risposta

0

Salva il tuo FragmentAdapter in onSaveInstanceState e restituiscilo all'Attività dopo una modifica della configurazione con onRetainNonConfigurationInstance in modo che i frammenti sopravvivano a un cambiamento di orientamento.

+0

@ oneilse12. Grazie. Ma con FragmentActivity non è possibile sovrascrivere il metodo onRetainNonConfigurationInstance. – gutiory

13

Il modo più semplice è lanciare una dichiarazione if subito dopo che viene chiamato il metodo on create e controllare se è già presente qualcosa. Se savedInstanceState non è nullo, non c'è bisogno di fare nulla:

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

(questa risposta è più per le persone che imbattervi in ​​questo domanda perche 'non riesco a capire il motivo per cui frammenti vengono nuovamente aggiunti ogni volta che trasformare il proprio dispositivo)

2

si potrebbe aggiungere: android:configChanges="screenSize|orientation" In AndroidManifest.xml.

Ciò impedirà a Android di chiamare onCreate sulla modifica dell'orientamento dello schermo. Se si desidera eseguire una gestione speciale del cambio di orientamento, è possibile ignorare onConfigurationChanges.

+8

Non riesco a credere che queste risposte siano ancora pubblicate qui. Meglio dare un'occhiata a questo: http://cyrilmottier.com/2014/09/25/deep-dive-into-android-state-restoration/ – dumazy

Problemi correlati