Android - 片段屏幕旋转

时间:2012-01-27 20:50:38

标签: android screen-orientation fragment android-viewpager

我有一个使用ViewPager处理2个碎片的FragmentActivity。

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); } }

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

3 个答案:

答案 0 :(得分:14)

最简单的方法是在调用on create方法后立即抛出if语句,并检查是否已经有了某些内容。如果savedInstanceState不为null,则无需执行任何操作:

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

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

答案 1 :(得分:2)

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

这会阻止Android在屏幕方向更改时调用onCreate。如果您想对方向更改执行特殊处理,可以覆盖onConfigurationChanges

答案 2 :(得分:0)

将FragmentAdapter保存在onSaveInstanceState中,并在使用onRetainNonConfigurationInstance更改配置后将其返回到Activity,以便片段在方向更改后继续存在。