FragmentTabHost里面的doTabChanged方法里面:
TabInfo newTab =null;
for(inti=0;i
TabInfo tab =mTabs.get(i);
if(tab.tag.equals(tabId)) {
newTab = tab;
}
}
if(newTab ==null) {
throw newIllegalStateException("No tab known for tag "+ tabId);
}
if(mLastTab!= newTab) {
if(ft ==null) {
ft =mFragmentManager.beginTransaction();
}
if(mLastTab!=null) {
if(mLastTab.fragment!=null) {
ft.detach(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{
ft.attach(newTab.fragment);
}
}
mLastTab= newTab;
}
可以看到里面是detach跟attach。
重写FragmentTabHost为BTFragmentTabHost将其里面的doTabChanged将detach替换为hide,将attach替换为show。