final String fragmentClassName = HogeFragment.class.getName();
FragmentManager fm = getSupportFragmentManager(); // or getFragmentManager()
FragmentTransaction ft = fm.beginTransaction();
Fragment f = Fragment.instantiate(this, fragmentClassName, args);
ft.replace(android.R.id.content, f, fragmentClassName);
ft.commit();
このコードでは、デバイスの向きが回転すると Fragement#onActivityCreated()
が複数回呼び出され、二回目以降は savedInstanceState
が null
になることがある。
これを回避するために FragmentManager#findFragmentByTag()
で既に生成済みかどうかチェックし、生成済みであればインスタンスの生成は行わずに FragmentTransaction#attach()
でアタッチを行うだけにする。
final String fragmentClassName = HogeFragment.class.getName();
FragmentManager fm = getSupportFragmentManager(); // or getFragmentManager()
Fragment f = fm.findFragmentByTag(fragmentClassName);
FragmentTransaction ft = fm.beginTransaction();
if (null == f)
{
f = Fragment.instantiate(this, fragmentClassName, args);
ft.replace(android.R.id.content, f, fragmentClassName);
}
else
{
ft.attach(f);
}
ft.commit();