У меня странная проблема с просмотром фрагментов, не освежающим должным образом, но это происходит только после закрытия приложения и повторного открытия после некоторого количества время.Фрагменты Android, хранящиеся в виде массива в FragmentPagerAdapter, не обновлены после выхода и возвращения в приложение
У меня есть TabSwitcherActivity
который содержит ViewPager
. ViewPager
переключает между 3 фрагментами, и каждый фрагмент представляет собой другой вид той же информации. Существуют определенные события, которые могут произойти, что приведет к устареванию информации, поэтому фрагменты должны быть уведомлены для обновления представления. Для этого у моего TabSwitcherActivity
есть метод notifyDataSetChanged()
, который будет перебирать 3 фрагмента и сообщать им об обновлении. Вот (я думаю) наиболее подходящий код:
public class TabSwitcherActivity extends FragmentActivity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Used to keep track of the child fragments of this activity so we can update their list adapters.
mFragments = new ArrayList<Fragment>();
// Set up the view pager and tab adapter.
setContentView(R.layout.pager_layout);
mViewPager = (ViewPager) super.findViewById(R.id.pager);
mFragments.add(Fragment.instantiate(this, FragmentOne.class.getName()));
mFragments.add(Fragment.instantiate(this, FragmentTwo.class.getName()));
mFragments.add(Fragment.instantiate(this, FragmentThree.class.getName()));
mViewPager.setAdapter(new ListPagerAdapter(super.getSupportFragmentManager(), mFragments));
}
public void notifyDataSetChanged() {
for (Fragment fragment : mFragments) {
if (fragment instanceof IDataSetChangedListener) {
((IDataSetChangedListener) fragment).notifyDataSetChanged();
}
}
}
}
Теперь это работает по назначению при первом запуске приложения. Проблема в том, что после закрытия приложения и повторного открытия через некоторое время вызов TabSwitcherActivity.notifyDataSetChanged()
во время работы приложения не обновляет представления фрагментов (это работает при первом запуске приложения после перезагрузки). Это заставляет меня думать, что существует ситуация жизненного цикла с фрагментами, которые я неправильно обрабатываю. Любая идея, что это может быть? Мне приходит в голову, что если фрагменты уничтожаются и воссоздаются, они, вероятно, неправильно хранятся в моем массиве mFragments
.
Я должен был быть более ясным - мнения, возможно, потребуется для обновления, пока приложение используется. Иногда вызывается 'notifyDataSetChanged()', пока приложение активно. Полезный совет менеджера фрагментов - я рассмотрю это. – mkasberg
Мое предложение состоит в том, чтобы обновить данные в onResume() ваших фрагментов * в дополнение к * любым обновлениям вручную, которые вы хотите выполнить через notifyDataSetChanged() – invertigo
Ahh - извините за путаницу, я не должен был хорошо описывать проблему в моем первом после. Проблема заключается не в том, что представления устарели, когда приложение запускается во второй раз. Скорее, после того, как приложение запускается во второй раз, вызов 'TabSwitcherActivity.notifyDataSetChanged()' во время работы приложения не приводит к обновлению представлений фрагментов. Я отредактирую свое оригинальное сообщение, чтобы быть более ясным. – mkasberg