2

我无法使用ActionBar获得片段的正常工作 - 当我更改Tab时片段正确切换。但是,当我旋转手机,然后记得片段正确显示(取决于所选内容),但我无法切换到另一个选项卡。没有错误,没有什么,我不知道如何检查什么是错的片段没有显示在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,但如果这会是这样的,为什么选定的片段显示正确?此外,当我添加了片段,它们彼此叠加...

+0

你是否检查过你的'onTabReselected'是否被调用,我敢打赌,因为没有任何内容可以处理它 – tyczj 2013-05-09 23:07:06

+0

@tyczj是的,它被调用,但是我应该放在那里? – wasyl 2013-05-09 23:16:01

+0

做任何你想要的应用程序时,选项卡被重新选择 – tyczj 2013-05-09 23:19:43

回答

0

它没有做任何事情,因为onTabReselected获取调用,你可以处理你想要的东西,但是这就是为什么什么也没有发生,当你选择标签

+0

我不认为我明白..我试图在'onTabReselected'显示所需的片段,它不起作用,我不知道还有什么我可以做吗? 我应该如何放置以便在方向更改后碎片能够正确显示? – wasyl 2013-05-10 03:32:58

+0

你可以删除片段,然后再次添加它,所以你没有像你说的那样堆叠起来 – tyczj 2013-05-10 19:25:24

相关问题