Android - 片段屏幕旋转[重复]

Posted

技术标签:

【中文标题】Android - 片段屏幕旋转[重复]【英文标题】:Android - Fragment screen rotate [duplicate] 【发布时间】:2012-02-20 19:56:21 【问题描述】:

我有 1 个带有 ViewPager 的 FragmentActivity,它处理 2 个 Fragment。

公共类 MyFragmentActivity 扩展 FragmentActivity

private Fragment f1; private Fragment f2; private ViewPager myPager; private MyFragmentAdapter mFragmentsAdapter; private static ArrayAdapter<Fragment> mFragmentArray; public void onCreate(Bundle icicle) super.onCreate(icicle); setContentView(R.layout.my_layout); myViewPager = (ViewPager) findViewById(R.id.pager_acciones); mFragmentArray = new ArrayAdapter<Fragment>(getApplicationContext(),android.R.layout.simple_list_item_1); f1 = new Fragment(); f1 = new Fragment(); mFragmentArray.add(f1); mFragmentArray.add(f2); mFragmentsAdapter = new MyFragmentAdapter(getSupportFragmentManager()); myPager.setAdapter(mFragmentsAdapter); myPartidoPager.setCurrentItem(0); public static class MyFragmentAdapter extends FragmentPagerAdapter public AccionesFragmentAdapter(FragmentManager fm) super(fm); @Override public int getCount() return mFragmentArray.getCount(); @Override public Fragment getItem(int position) return mFragmentArray.getItem(position);

我的问题是每次屏幕方向发生变化时,都会创建活动以及片段。我不介意是否再次创建活动,但我不希望重新创建片段。

【问题讨论】:

我找到了解决方案here 无论如何感谢@oneilse14 的回答。 【参考方案1】:

最简单的方法是在 on create 方法被调用后立即抛出一个if 语句,并检查你是否已经有一些东西在那里。如果savedInstanceState 不为空,则无需执行任何操作:

if (savedInstanceState == null)
  // do whatever 
 else 
  // dont do anything

(这个答案更适合那些偶然发现这个问题的人,因为他们无法弄清楚为什么每次转动设备时都会重新添加片段)

【讨论】:

【参考方案2】:

您可以添加: android:configChanges="screenSize|orientation"AndroidManifest.xml.

这将阻止 Android 在屏幕方向更改时调用 onCreate。如果要对方向变化进行特殊处理,可以覆盖onConfigurationChanges

【讨论】:

不敢相信这些答案仍然张贴在这里。最好看看这个:cyrilmottier.com/2014/09/25/… 这种方法最显着的缺点之一是,如果不调用 onCreate,Android 将没有机会为横向和纵向加载不同的布局。【参考方案3】:

将您的 FragmentAdapter 保存在 onSaveInstanceState 中,并在使用 onRetainNonConfigurationInstance 进行配置更改后将其返回给 Activity,以便片段在方向更改后仍然存在。

【讨论】:

@oneilse12。谢谢你。但是使用 FragmentActivity 是不可能覆盖 onRetainNonConfigurationInstance 方法的。

以上是关于Android - 片段屏幕旋转[重复]的主要内容,如果未能解决你的问题,请参考以下文章

屏幕旋转后Android片段重叠

处理屏幕旋转上的片段重复(带有示例代码)

在 xamarin.android 中管理屏幕旋转时的片段外观

Android Exoplayer,在屏幕旋转时恢复视频

当我旋转屏幕时,我想更改 MainActivity 的布局,其中包含两个片段

在我旋转屏幕之前,LiveData 不会加载到片段中