- public class MainActivity extends SherlockFragmentActivity implements LibraryListener, DrawerListener {
- private MainFragment mMainFragment;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
- viewPager.setAdapter(new MainPagerAdapter(getSupportFragmentManager()));
- }
- public class MainPagerAdapter extends FragmentPagerAdapter {
- public MainPagerAdapter(FragmentManager fm) {
- super(fm);
- }
- @Override
- public Fragment getItem(int position) {
- switch (position) {
- case 0:
- return (mMainFragment = new MainFragment());
- case 1:
- return new SubFragment();
- }
- return null;
- }
- @Override
- public int getCount() {
- return 2;
- }
- }
- private void hoge() {
- mMainFragment.fuga();
- }
- }
なぜ mMainFragment が null になるかというと、FragmentPagerAdapter が一度 getItem() で生成した Fragment を再利用してくれるので、画面回転時に getItem() が呼ばれないからです。
画面回転後も mMainFragment に以前のインスタンスを保持させるには、次のように onSaveInstanceState() と onRestoreInstanceState() を使います。
- @Override
- protected void onSaveInstanceState(Bundle outState) {
- super.onSaveInstanceState(outState);
- if (mMainFragment != null) {
- getSupportFragmentManager().putFragment(outState, "main_fragment", mMainFragment);
- }
- }
- @Override
- protected void onRestoreInstanceState(Bundle savedInstanceState) {
- super.onRestoreInstanceState(savedInstanceState);
- if (mMainFragment == null) {
- mMainFragment = (MainFragment) getSupportFragmentManager().getFragment(savedInstanceState, "main_fragment");
- }
- }
0 件のコメント:
コメントを投稿