Я использую FragmentPagerAdapter, содержащий несколько фрагментов, которые должны быть уведомлены об изменениях в базе данных. Я делаю это путем итерации над фрагментами, которые реализуют интерфейс обратного вызова, и вызывая метод refreshData().FragmentPagerAdapter - Как обрабатывать изменения ориентации?
Это прекрасно работает, пока устройство не изменит ориентацию. После изменения ориентации пользовательский интерфейс фрагмента явно не обновляется, даже если вызов метода работает.
Из того, что я прочитал до сих пор, это происходит потому, что 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();
}
Я временно устранили эту проблему, используя широковещательный приемник внутри каждого фрагмента, но это решение, кажется расточительным и может создать утечку памяти. Как исправить это правильно? Я использую другой макет и логику в ландшафтном режиме, поэтому я хочу использовать вновь созданные фрагменты после изменения ориентации.
добавьте в Уре activty тег в Manifest андроида: configChanges = "ориентация | Размер экрана | keyboardHidden" (Target API 13+) – TheFlash
minSdkVersion 7 так что это не будет работать для меня –