2016-04-22 68 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); 
        } 
       }