ActionBar でフラグメントを適切に動作させることができません - タブを変更すると、フラグメントが適切に切り替わります。しかし、電話を回転させると、記憶されたフラグメントが正しく表示されますが (選択した内容によって異なります)、別のタブに切り替えることはできません。エラーがない、何もない、何が問題なのかを確認する方法がわからない
MapHandlerFragment mMapHandler;
VehiclesFragment mVehiclesFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActionBar ab = getSupportActionBar();
ab.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
ab.setDisplayShowTitleEnabled(false);
ab.setDisplayShowHomeEnabled(false);
FragmentManager fm = getSupportFragmentManager();
mMapHandler = new MapHandlerFragment();
mVehiclesFragment = new VehiclesFragment();
if (savedInstanceState == null) {
fm.beginTransaction()
.add(android.R.id.content, mVehiclesFragment)
.add(android.R.id.content, mMapHandler)
.commit();
} else {
fm.beginTransaction()
.hide(mMapHandler)
.hide(mVehiclesFragment)
.commit();
}
Tab vehiclesTab = ab.newTab().setText("Pojazdy").setTag(FRAGMENT_VEHICLES)
.setTabListener(new MyTabsListener(mVehiclesFragment));
ab.addTab(vehiclesTab);
Tab mapTab = ab.newTab().setText("Mapa").setTag(FRAGMENT_MAP)
.setTabListener(new MyTabsListener(mMapHandler));
ab.addTab(mapTab);
if (savedInstanceState == null) {
ab.selectTab(mapTab);
} else {
String selected = savedInstanceState.getString(SELECTED_TAB);
if (selected == FRAGMENT_VEHICLES) {
ab.selectTab(vehiclesTab);
} else if (selected == FRAGMENT_MAP) {
ab.selectTab(mapTab);
}
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString(SELECTED_TAB, mSelectedTab);
}
protected class MyTabsListener implements ActionBar.TabListener {
private Fragment fragment;
public MyTabsListener(Fragment fragment) {
this.fragment = fragment;
}
public void onTabReselected(Tab tab, FragmentTransaction ft) {
}
public void onTabSelected(Tab tab, FragmentTransaction ft) {
ft.show(fragment);
}
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
ft.hide(fragment);
}
}
}
savedInstanceState
でない場合はフラグメントを追加しないことはわかっていますnull
が、そうである場合、選択したフラグメントが正しく表示されるのはなぜですか? また、フラグメントを追加すると、それらは互いに重なり合います...