【问题标题】:Android - Fragment screen rotate [duplicate]Android - 片段屏幕旋转[重复]
【发布时间】: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 的回答。

标签: android screen-orientation fragment android-viewpager


【解决方案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 方法的。
    猜你喜欢
    • 2012-03-11
    • 1970-01-01
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-29
    • 1970-01-01
    相关资源
    最近更新 更多