2

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が、そうである場合、選択したフラグメントが正しく表示されるのはなぜですか? また、フラグメントを追加すると、それらは互いに重なり合います...

4

1 に答える 1