Uso un FragmentPagerAdapter contenente numerosi frammenti che devono essere avvisati delle modifiche al database. Lo faccio iterando sui frammenti, che implementano un'interfaccia di callback e chiamando un metodo refreshData().FragmentPagerAdapter - Come gestire le modifiche di orientamento?
Questo funziona perfettamente finché il dispositivo non cambia orientamento. Dopo una modifica dell'orientamento, l'interfaccia utente del frammento non si aggiorna visibilmente anche se la chiamata al metodo sembra funzionare.
Da quanto ho letto finora ciò si verifica perché FragmentPagerAdapter gestisce il ciclo di vita dei frammenti ei frammenti che ricevono la richiamata non sono quelli effettivamente visualizzati.
private class DataPagerAdapter extends FragmentPagerAdapter {
private DataFragment[] fragments = new DataFragment[] {
new FooDataFragment(), BarDataFragment()};
public DataPagerAdapter(android.support.v4.app.FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return fragments[position];
}
@Override
public int getCount() {
return fragments.length;
}
public DataFragment[] getFragments() {
return fragments;
}
}
protected void refreshData() {
for (DataFragment dataFragment : mPagerAdapter.getFragments()) {
dataFragment.refreshData();
}
ho temporaneamente risolto questo problema utilizzando un ricevitore di trasmissione all'interno di ciascun frammento, ma questa soluzione sembra essere uno spreco e potrebbe generare perdite di memoria. Come posso risolvere questo correttamente? Uso un layout e una logica diversi in modalità orizzontale, quindi desidero utilizzare i frammenti appena creati dopo un cambio di orientamento.
aggiungere questo al ur tag activty in Android Manifest: configChanges = "orientamento | Screensize | keyboardHidden" (Target API 13+) – TheFlash
minSdkVersion è 7 quindi questo non funzionerà per me –