2016-04-22 70 views
0

有一個TabHost與幾個選項卡。它在切換標籤時大部分時間都有效。 但有時一個標籤,當點擊它並切換到選項卡,然後在跟蹤它確實調用TabHost有一段時間託管片段不顯示

ft.show(newTab.fragment); 

但片段內容不顯示。

注意到(即它有三個選項卡),第一個選項卡(默認打開的第一個選項卡始終可以選中),但接下來的2選項卡會稍後出現問題。

任何人都注意到類似的或任何東西在這裏丟失?謝謝!

in TabHost.OnTabChangeListener 

@Override 
public void onTabChanged(String tabId) { 

    FragmentTransaction ft = mFragmentManager.beginTransaction(); 
    TabInfo newTab = null; 
    for (int i=0; i<mTabs.size(); i++) { 
     TabInfo tab = mTabs.get(i); 
     if (tab.tag.equals(tabId)) { 
      newTab = tab; 
      break; 
     } 
    } 

    if (mLastTab != newTab) { 
     if (mLastTab != null) { 
      if (mLastTab.fragment != null) { 
       ft.hide(mLastTab.fragment); 
      } 
     } 
     if (newTab != null) { 
      if (newTab.fragment == null) { 
       newTab.fragment = Fragment.instantiate(mContext, 
         newTab.clss.getName(), newTab.args); 
       ft.add(mContainerId, newTab.fragment, newTab.tag); 

      } else { 
       if (newTab.fragment.isHidden()){ 
        ft.show(newTab.fragment); 
       } else { 
        ft.attach(newTab.fragment); 
       } 
      } 
     } 

     mPreviousTab = mLastTab; 
     mLastTab = newTab; 

     ft.commit(); 
    } 
} 

回答

0

找到問題,片段可能被隱藏和分離。在這種情況下需要創建一個新的。

變化:

if (newTab.fragment.isHidden()){ 
       ft.show(newTab.fragment); 
      } else { 
       ft.attach(newTab.fragment); 
      } 

到:

if (!newTab.fragment.isDetached() && newTab.fragment.isHidden()){ 
        ft.show(newTab.fragment); 
       } else { 
        if (newTab.fragment.isDetached() || !newTab.fragment.isAdded()) { 
         newTab.fragment = Fragment.instantiate(mContext, 
           newTab.clss.getName(), newTab.args); 
         ft.add(mContainerId, newTab.fragment, newTab.tag); 

        } else { 
         ft.attach(newTab.fragment); 
        } 
       }