私はあなたのコードを完全には理解していないかもしれませんが、あなたの MainActivity の onCreate でこのビットを疑っています:
frAdapter = new FragmentAdapter(getSupportFragmentManager());
vPager = (ViewPager)findViewById(R.id.pager);
vPager.setAdapter(frAdapter);
vPager.setCurrentItem(1);
vPager.setOnPageChangeListener(this);
vPager.setOffscreenPageLimit(3);
currentItem を onSaveInstance に保存して取得する必要があると考えてください。
vPager.setCurrentItem(value_before_orientation_change);
ただし、vPager が実際にフラグメントを上書きするかどうかは 100% わかりません。
編集:
さらに可能性が高いのは、onActivityCreated の CenterPanelFragment.java で、カタログをコミットすることです。
fragmentTransaction.replace(R.id.fragment_container, fragmentCatalog);
fragmentTransaction.addToBackStack("FragmentCatalog");
fragmentTransaction.commit();
CenterPanelFragment の onCreate の setRetainInstance(true) のような単純なもので、この問題を解決できるかもしれません。
方向の変更によって CenterPanelFragment が再起動され、onActivityCreated が新たに呼び出されると確信しています。
FragmentCatalogで試すことができると思います:
そして、次の行を変更します。
fragmentTransaction.replace(R.id.fragment_container, fcAllStone);
に:
fragmentTransaction.replace(R.id.fragment_container, fcAllStone, "fragment_stone");
今CentralPanelFragmentで:
if (savedInstanceState != null)
{
Log.d(MainActivity.tag, "CenterPanelFragment not null");
fragmentCatalog = (FragmentCatalog)getFragmentManager().getFragment(savedInstanceState, FragmentCatalog.class.getName());
// see if stone is open
if (savedInstanceState != null) {
FragmentCatalogStone fragmentStone = (FragmentCatalogStone) getFragmentManager()
.findFragmentByTag("fragment_stone");
if (FragmentCatalogStone != null) {
/*
* maybe recommit it, dont actually think anything is needed
* since moving the below code inside the else statement
* prevents it from overwriting the FragmentCatalogStone
*/
}
}
else
{
Log.d(MainActivity.tag, "CenterPanelFragment null");
fragmentCatalog = new FragmentCatalog();
android.support.v4.app.FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
fragmentTransaction.replace(R.id.fragment_container, fragmentCatalog);
fragmentTransaction.addToBackStack("FragmentCatalog");
fragmentTransaction.commit();
}