FragmentPagerAdapter - 避免重新创建片段的视图

时间:2011-11-27 09:55:09

标签: android android-fragments

我注意到,当使用FragmentPagerAdapter时,与当前片段不相邻的片段正在销毁他们的观点(并调用他们的onPause()onStop()方法,并且奇怪地{ {1}}未被调用,并且正在为这些片段再次调用onSaveInstanceState(Bundle)。我的问题是我在这些片段上运行了一些onCreateView,并且重新创建它们是不可行的,因为这些定时器应该触发并更新相关的片段UI。对于大屏幕,我使用TimerHorizontalScrollView,它可以完美运行。

我的活动中的相关代码:

LinearLayout

片段是在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(); } } } 方法上创建的,其他片段可以在运行时添加到列表中,但即使不添加新片段,当我滚动到第一个片段时,第三个片段也会被销毁。

有没有办法避免它们的破坏,或者我是否应该忘记onCreate并使用ViewPager来制作小屏幕?我选择使用它,因为我认为“固定”行为确实有助于实用性。

4 个答案:

答案 0 :(得分:18)

以下方法应防止碎片破坏:

mViewPager.setOffscreenPageLimit(no_of_fragments_to_be_kept_offscreen);

答案 1 :(得分:6)

而不是黑客FragmentPagerAdapter,只需使用ViewPager

int limit = myPagerAdapter.getCount();
// Set the number of pages that should be retained to either side of the current page in the view hierarchy in an idle state.
viewpager.setOffscreenPageLimit(limit);

答案 2 :(得分:0)

您应该从FragmentStatePagerAdapter而不是FragmentPagerAdapter扩展。 不应再次调用onCreate(Bundle savedInstanceState)方法第二次。

答案 3 :(得分:0)

您需要为寻呼机设置限制以避免视图破坏。

your_pager_obj.setOffscreenPageLimit(no_of_fragments_on_each_side_of_the_current_fragment);