TabHost 有时托管片段不显示
TabHost some time the hosted fragment does not show
有一个带有几个选项卡的 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();
}
}
找到问题所在,片段也可以隐藏和分离。在那种情况下需要创建一个新的。
变化:
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);
}
}
有一个带有几个选项卡的 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();
}
}
找到问题所在,片段也可以隐藏和分离。在那种情况下需要创建一个新的。
变化:
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);
}
}