Android FragmentPagerAdapter-避免重新创建碎片';意见

Android FragmentPagerAdapter-避免重新创建碎片';意见,android,android-fragments,Android,Android Fragments,我注意到,当使用FragmentPagerAdapter时,与当前片段不相邻的片段的视图被破坏(调用了onPause()和onStop()方法,奇怪的是onSaveInstanceState(Bundle)没有被调用),对于这些片段,将再次调用onCreateView。我的问题是,我在这些片段上运行了一些Timers,重新创建它们是不可行的,因为这些定时器应该触发并更新相关的片段UI。对于大屏幕,我使用了水平滚动视图和线性布局,它可以完美地工作 我的活动中的相关代码: private class

我注意到,当使用
FragmentPagerAdapter
时,与当前片段不相邻的片段的视图被破坏(调用了
onPause()
onStop()
方法,奇怪的是
onSaveInstanceState(Bundle)
没有被调用),对于这些片段,将再次调用
onCreateView
。我的问题是,我在这些片段上运行了一些
Timer
s,重新创建它们是不可行的,因为这些定时器应该触发并更新相关的片段UI。对于大屏幕,我使用了
水平滚动视图
线性布局
,它可以完美地工作

我的活动中的相关代码:

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
,在小屏幕上也使用
HorizontalScrollView
?我之所以选择使用它,是因为我认为“固定”行为确实有助于提高可用性。

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

mViewPager.setOffscreenPageLimit(no_of_fragments_to_be_kept_offscreen);

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

您需要设置对寻呼机的限制,以避免视图被破坏

your_pager_obj.setOffscreenPageLimit(no_of_fragments_on_each_side_of_the_current_fragment);

只需使用
ViewPager
即可,而不是黑客攻击
FragmentPagerAdapter

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);

它不是MFFragmentPageRadapter.setOffscreenPageLimit()。它是mViewPager.setOffscreenPageLimit(numberOfFragments)。我很惊讶这么多人对这个错误投了赞成票。