FragmentPagerAdapter - Jak obsługiwać zmiany orientacji?
Używam aFragmentPagerAdapter
zawierające kilka fragmentów, które muszą zostać powiadomione o zmianach wdatabase
. Robię to, iterując fragmenty implementujące interfejs wywołania zwrotnego i wywołującrefreshData()
metoda.
Działa to dobrze, dopóki urządzenie nie zmieni orientacji. Po zmianie orientacji interfejs użytkownika fragmentu nie jest widocznie odświeżany, mimo że wywołanie metody wydaje się działać.
Z tego, co przeczytałem do tej pory, dzieje się, ponieważFragmentPagerAdapter
obsługuje cykl życia fragmentów, a fragmenty, które otrzymują wywołanie zwrotne, nie są rzeczywiście wyświetlane.
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();
}
Tymczasowo rozwiązałem ten problem za pomocą odbiornika rozgłoszeniowego wewnątrz każdego fragmentu, ale to rozwiązanie wydaje się być marnotrawstwem i może powodować wycieki pamięci. Jak to naprawić prawidłowo? Używam innego układu i logiki w trybie poziomym, więc chcę użyć nowo utworzonych fragmentów po zmianie orientacji.