Я использую FragmentPagerAdapter
, содержащий несколько фрагментов, которые нужно уведомлять об изменениях в database
. Я делаю это, перебирая фрагменты, реализующие интерфейс обратного вызова, и вызывая метод refreshData()
.
Это работает нормально, пока устройство не изменит ориентацию. После изменения ориентации пользовательский интерфейс фрагмента не обновляется, хотя вызов метода работает.
Из того, что я прочитал до сих пор, это происходит потому, что FragmentPagerAdapter
обрабатывает жизненный цикл фрагмента, а фрагменты, которые получают обратный вызов, не являются теми, которые фактически отображаются.
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();
}
Я временно исправил эту проблему, используя широковещательный приемник внутри каждого фрагмента, но это решение кажется расточительным и может привести к утечке памяти. Как мне исправить это правильно? Я использую другой макет и логику в ландшафтном режиме, поэтому я хочу использовать вновь созданные фрагменты после изменения ориентации.