使用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;
}
}
答案 0 :(得分:0)
将setRetainInstance(true);
添加到onAttach(Activity activity)
片段的ViewPager
。
Open for correction, as Always! Regards, Edward Quixote.