1

我正在使用ActionBarSherlock與導航選項卡和多個片段的應用程序。Android:片段堆棧混淆與ActionBar和標籤

我有三個導航選項卡,每個選項卡都有一個或多個子視圖。我也有三個選項菜單項與一個或多個子視圖。當我在每個選項卡或選項菜單中深入查看視圖時,一切正常。每個初始子視圖都是一個調用詳細視圖或視圖的ListFragment。

當我在子視圖或選項菜單片段中開始切換標籤時遇到問題。我的視圖開始與新視圖下方的前一個視圖重疊。

這裏是我的TabListener:

class MyTabsListener implements ActionBar.TabListener { 
public SherlockListFragment fragment; 

public MyTabsListener(SherlockListFragment fragment) { 
    this.fragment = fragment; 
} 

public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) { 
    ft.replace(android.R.id.content, fragment); 
} 

public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {  
    ft.remove(fragment); 
} 

public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) { 
    // Don't care if a tab is reselected, no special handling required 
} 

這是我的選擇菜單:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 

    // initialize variables 
    FragmentManager fm = null; 
    FragmentTransaction ft = null; 
    ActionBar actionBar = getSupportActionBar(); 

    // check to see which action item was selected 
    switch (item.getItemId()) { 
    case android.R.id.home: 
     // initialize variables 
     fm = this.getSupportFragmentManager(); 
     ft = fm.beginTransaction(); 

     if (fm.getBackStackEntryCount() > 0) { 

      fm.popBackStack(); 
      ft.commit();  
     }else { 
      actionBar = getSupportActionBar(); 
      actionBar.setDisplayHomeAsUpEnabled(false); 
     } 
     return true; 
    case R.id.menuitem_search: 
     onSearchRequested(); 
     return true; 
    case R.id.menuitem_contacts: 
     ContactListFragment contactListFragment = new ContactListFragment();  
     ft = getSupportFragmentManager().beginTransaction(); 
     ft.replace(android.R.id.content, contactListFragment);  
     ft.addToBackStack(null); 
     ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
     ft.commit(); 
     return true; 
    case R.id.menuitem_isolation: 
     ISOListFragment isoListFragment = new ISOListFragment();  
     ft = getSupportFragmentManager().beginTransaction(); 
     ft.replace(android.R.id.content, isoListFragment);  
     ft.addToBackStack(null);   
     ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
     ft.commit(); 
     return true; 
    case R.id.menuitem_water: 
     H2OListFragment h2oListFragment = new H2OListFragment();  
     ft = getSupportFragmentManager().beginTransaction(); 
     ft.replace(android.R.id.content, h2oListFragment);  
     ft.addToBackStack(null);   
     ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
     ft.commit(); 
     return true; 
    default: 
     return super.onOptionsItemSelected(item); 
    } 
} 

我對所有的片段之一MainActivity。處理鑽取子視圖和ActionBar導航選項卡時,如何處理後臺堆棧?任何幫助或建議將不勝感激!

+0

。你做到了嗎? – Noodles 2012-08-23 06:15:58

回答

1

這裏是爲我工作的解決方案:我的興趣太

@Override 
public void onBackPressed() { 

    // initialize variables 
    FragmentManager fm = getSupportFragmentManager(); 
    FragmentTransaction ft = fm.beginTransaction(); 

    // check to see if stack is empty 
    if (fm.getBackStackEntryCount() > 0) {   
     fm.popBackStack(); 
     ft.commit();  
    } 
    else { 

     super.onBackPressed(); 
    } 
    return; 
} 
+0

但是,如果您在1個選項卡菜單中向下鑽取,然後切換到另一個然後按回...您將以完全不同於用戶期望的方式導航。 – Warpzit 2012-10-25 08:19:07