我注意到,当使用 FragmentPagerAdapter
时,与当前 fragment 不相邻的 fragment 的 View 被破坏(以及它们的 onPause()
和 onStop()
方法被调用,奇怪的是 onSaveInstanceState(Bundle)
没有被调用),并且 onCreateView
被再次调用这些 fragment 。我的问题是我有一些 Timer
在这些 Fragment 上运行,重新创建它们是不可行的,因为这些计时器应该触发并更新相关的 Fragment UI。对于大屏幕,我使用了带有 LinearLayout
的 HorizontalScrollView
,它可以完美地工作。
我的Activity中的相关代码:
private class MyPagerAdapter extends FragmentPagerAdapter implements TitleProvider {
public MyPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
if (position == 0) {
return mAddNewScenesFragment;
} else if (position == 1) {
return mGlobalEventsFragment;
} else {
return mSceneFragments.get(position - 2);
}
}
@Override
public int getCount() {
return mSceneFragments.size() + 2;
}
@Override
public String getTitle(int position) {
if (position == 0) {
return "New scene";
} else if (position == 1) {
return mGlobalEventsFragment.getTitle();
} else {
return mSceneFragments.get(position - 2).getTitle();
}
}
}
fragment 是在 Activity 的 onCreate
方法上创建的,其他 fragment 可以在运行时添加到列表中,但即使不添加新 fragment ,当我滚动到第一个 fragment 时,第三个 fragment 也会被销毁。
有没有办法避免它们被破坏,或者我应该忘记 ViewPager
而对小屏幕也使用 HorizontalScrollView
?我选择使用它是因为我认为“固定”行为确实有助于提高可用性。
最佳答案
下面的方法可以防止 fragment 被破坏:
mViewPager.setOffscreenPageLimit(no_of_fragments_to_be_kept_offscreen);
关于android - FragmentPagerAdapter - 避免重新创建 fragment 的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8284732/