的Android - 片段屏幕旋转
I'have 1 FragmentActivity与ViewPager该手柄2个片段。的Android - 片段屏幕旋转
public class MyFragmentActivity extends 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); } }
我的问题是,每一次屏幕方向的变化,将创建活动,也是片段。我不介意活动是否再次创建,但我不希望碎片被重新创建。
保存FragmentAdapter的onSaveInstanceState中与onRetainNonConfigurationInstance配置更改后,返回到活动使片段生存的方向改变。
@ oneilse12。谢谢。但是使用FragmentActivity,不可能覆盖onRetainNonConfigurationInstance方法。 – gutiory 2012-01-29 18:38:26
最简单的方法是抛出一个if
陈述权上创建方法被调用后检查,看看是否你已经有东西在里面。如果savedInstanceState
不为空,你不需要做任何事情:
if (savedInstanceState == null){
// do whatever
} else {
// dont do anything
}
(这个答案是更多的在这问那绊倒人的事业,他们想不通为什么片段得到重新添加他们每次打开他们的设备)
您可以添加: android:configChanges="screenSize|orientation"
在AndroidManifest.xml
。
这将阻止Android的屏幕方向改变调用onCreate
。如果要执行方向更改的特殊处理,则可以覆盖onConfigurationChanges
。
不能相信这些答案仍然在这里发布。最好看看这个:http://cyrilmottier.com/2014/09/25/deep-dive-into-android-state-restoration/ – dumazy 2015-04-03 10:02:10
我找到了解决办法[这里](http://stackoverflow.com/questions/7951730/viewpager-and-fragments-whats-the-right-way-to-store-fragments-state)感谢@ oneilse14您无论如何回答。 – gutiory 2012-01-29 19:37:11