2016-04-22 19 views
0

いくつかのタブを持つTabHostを持つ。タブを切り替えるときはほとんどの場合動作します。 しかし、いつか一つのタブをクリックしたときに、それはタブに切り替えず、トレースにそれがTabHostホストされたフラグメントが表示されないことがあります。

ft.show(newTab.fragment); 

を呼んだが、フラグメントのコンテンツは表示されません。

(3つのタブがあります)最初に開いた最初のタブは常にタブで表示されますが、次のタブ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); 
        } 
       } 
関連する問題