首页 文章

设计为在纵向模式下工作的ViewPager会在方向更改时重新创建片段

提问于
浏览
1

在使用ViewPager片段和方向更改时,我有一个相当奇怪的问题 . 我最简单的描述中的问题如下:

我的应用程序有一个活动(MainActivity),旨在在纵向和横向模式下工作 . 我在不同的方向使用不同的布局 - 纵向的ViewPager和横向完全不同的视图的简单片段 . 这两个组件彼此独立 .

我在我的ViewPager片段和我的横向片段中使用的片段代码都很简单 - 一个onAttach(),onDetach()和onCreateView(),其中我对我的视图进行了膨胀 .

当我改变方向时,我并不关心保留片段,因为我正在展示完全不同的布局 . 但是,我的问题是ViewPager片段在横向模式下被破坏并重新创建(onDestroy() - > onDetach() - > onAttach() - > onCreate() - > onCreateView()),即使不可见 .

是否有解决方法不在方向更改时重新创建这些片段?

我的MainActivity的onCreate()代码如下,我正在检查onCreate()中的方向,以决定需要初始化哪些视图组件 .

private ViewPager mPager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    }

    setContentView(R.layout.activity_main);

    ActionBar actionBar = getActionBar();
    actionBar.setLogo(R.drawable.empty);
    actionBar.setTitle(R.string.empty);

    if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
        mPager = (ViewPager) findViewById(R.id.portraitviewpager);
        if (mPager != null) {
            mPager.setAdapter(new SectionsPagerAdapter(getSupportFragmentManager()));
            mPager.setPageTransformer(false, new DepthPageTransformer());
            mPager.setCurrentItem(HOME);    
        }
    } 

}

另外,为了使事情更简单,我的SectionsPagerAdapter代码如下:

public class SectionsPagerAdapter extends FragmentPagerAdapter {

    private static final int PAGE_COUNT = 2;

    public SectionsPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        switch (position) {
        case MAIN_MENU:
            return MainMenuFragment.newInstance();
        case HOME:
            return HomeFragment.newInstance();
        }
        return null;
    }

    @Override
    public int getCount() {
        return PAGE_COUNT;
    }

}

1 回答

  • 0

    setRetainInstance(true); 添加到 ViewPager 片段的 onAttach(Activity activity) 中 .


    Open for correction, as Always!
    
    Regards,
    Edward Quixote.
    

相关问题