从根源解决FragmentTabHost切换会onDestroyView问题

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。

你可能感兴趣的:(从根源解决FragmentTabHost切换会onDestroyView问题)