【问题标题】:TabHost some time the hosted fragment does not showTabHost 有时托管片段不显示
【发布时间】:2016-04-26 04:54:55
【问题描述】:

拥有一个带有几个标签的 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();
    }
}

【问题讨论】:

    标签: android android-tabhost


    【解决方案1】:

    找到问题所在,片段也可以被隐藏和分离。在这种情况下需要创建一个新的。

    改变:

    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);
                        }
                    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-06
      相关资源
      最近更新 更多