繁体   English   中英

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

[英]FragmentPagerAdapter - avoid recreation of fragments' views

我注意到,使用时FragmentPagerAdapter是不相邻于当前一个是具有自己的看法破坏了片段(和它们onPause()onStop()方法调用,奇怪onSaveInstanceState(Bundle)不会被调用),和正在为这些片段再次调用onCreateView 我的问题是我在这些片段上运行了一些Timer ,并且重新创建它们是不可行的,因为这些定时器应该触发并更新相关的片段UI。 对于大屏幕,我使用了带有LinearLayoutHorizontalScrollView ,它可以完美地工作。

我的活动中的相关代码:

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

片段是在Activity的onCreate方法上创建的,其他片段可以在运行时添加到列表中,但即使不添加新片段,当我滚动到第一个片段时,第三个片段也会被销毁。

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

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

mViewPager.setOffscreenPageLimit(no_of_fragments_to_be_kept_offscreen);

不要乱砍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);

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

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

your_pager_obj.setOffscreenPageLimit(no_of_fragments_on_each_side_of_the_current_fragment);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM