2012-05-23 17 views
11

Sto usando android.support.v4.view.ViewPager in un'applicazione.Come gestire savedInstanceState quando si utilizza ViewPager?

Quando l'utente ruota lo schermo, l'attività viene distrutta e ricreata. I frammenti attualmente attivi nello ViewPager (di solito quello sullo schermo, quello a sinistra di esso e quello a destra di esso) sono tutti archiviati su savedInstanceState.

Viene creata una nuova attività, FragmentActivity.onCreate(savedInstanceState) viene chiamato con lo stato del frammento e questi tre frammenti vengono ricreati utilizzando il pacchetto. Tuttavia, il mio onCreate imposta anche l'adattatore ViewPager e ViewPager, che creano nuovamente i propri frammenti, ottenendo così DUE di ciascuno di questi tre frammenti.

Come posso associare i frammenti ricreati automaticamente con l'adattatore del mio ViewPager invece di ricrearli da zero?

risposta

17

Non importa. Sembra che stavo usando FragmentPagerAdapter in modo errato.

Il modo corretto di utilizzare FragmentPagerAdapter consiste nel creare un'istanza del nuovo frammento in getItem(). Stavo istanziando tutti i miei frammenti nel costruttore dell'adattatore invece, memorizzandoli in un array, e poi cercandoli nell'array e restituendo il frammento appropriato in getItem().

Se si istanzia il proprio frammento da getItem(), allora FragmentPagerAdapter.instantiateItem() utilizzerà automaticamente il frammento di riciclo invece di istanziarne uno nuovo.

+0

Sei un vero toccasana, grazie. – Simon

Problemi correlati