我遇到了一个片段视图无法正确刷新的奇怪问题,但它仅在应用程序关闭并在一段时间后重新打开后才会发生。
我有一个TabSwitcherActivity
包含一个ViewPager
. 3个片段之间的ViewPager
切换,每个片段代表相同信息的不同视图。可能发生某些事件会导致信息过时,因此需要通知片段以刷新视图。为了实现这一点,我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
数组中。