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