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 - 片段屏幕旋转[重复]的主要内容,如果未能解决你的问题,请参考以下文章
在 xamarin.android 中管理屏幕旋转时的片段外观