5

我正在尝试按照http://developer.android.com/resources/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentTabs.html中的说明实现 FragmentTabs 。一切都很顺利,直到我这样做:

我从一个标签开始了许多不同的片段,例如:

tab1--->fragment1--->fragment2--->fragment3

选项卡2

但是当我切换到tab2并再次回到tab1时,我得到的是fragment1屏幕而不是fragment3(即我在第一个标签中有3个片段,而我在第三个片段上,我在切换到第二个标签后再次出现在第一个标签上,我是带到第一个片段而不是第三个片段)..谁能告诉可能是什么问题?

        @Override
        public void onTabChanged(String tabId) {
            TabInfo newTab = mTabs.get(tabId);
            if (mLastTab != newTab) {
                FragmentTransaction ft = mActivity.getSupportFragmentManager().beginTransaction();
                if (mLastTab != null) {
                    if (mLastTab.fragment != null) {
                        ft.detach(mLastTab.fragment);
                    }
                }
                if (newTab != null) {
                    if (newTab.fragment == null) {
                        newTab.fragment = Fragment.instantiate(mActivity,
                                newTab.clss.getName(), newTab.args);
                        ft.add(mContainerId, newTab.fragment, newTab.tag);
                    } else {
                        ft.attach(newTab.fragment);
                    }
                }

                mLastTab = newTab;
                ft.commit();
                mActivity.getSupportFragmentManager().executePendingTransactions();
            }
        }

当我评论 attach() 和 detatch() 时,我得到了这个:

在此处输入图像描述

4

2 回答 2

2

更新:

我建议您保留原始代码onTabChanged并使用addToBackStack方法来维护片段的遍历状态。addToBackStack从一个片段转到下一个片段时调用,例如adding 或replaceing 片段。

还要更改TabInfo.fragment引用以反映选项卡内片段之间的转换。


不要在每次更改选项卡时附加和分离。

   @Override
    public void onTabChanged(String tabId) {
        TabInfo newTab = mTabs.get(tabId);
        if (mLastTab != newTab) {
            FragmentTransaction ft = mActivity.getSupportFragmentManager().beginTransaction();

            if (newTab != null) {
                if (newTab.fragment == null) {
                    newTab.fragment = Fragment.instantiate(mActivity,
                            newTab.clss.getName(), newTab.args);
                    ft.add(mContainerId, newTab.fragment, newTab.tag);
                } else {
                    ft.replace(mContainerId, newTab.fragment, newTab.tag);
                } 
            }
            mLastTab = newTab;
            ft.commit();
            mActivity.getSupportFragmentManager().executePendingTransactions();
        }
    }
于 2012-05-19T05:04:59.063 回答
2

没有更多细节,很难说具体出了什么问题。但是,我可以根据个人经验说,当我第一次必须实现片段选项卡时,我经历了很多糟糕的教程,然后才找到了可行的方法。终于对我有意义的教程在这里: http ://thepseudocoder.wordpress.com/2011/10/04/android-tabs-the-fragment-way/

作为奖励,还有一些 Github 源代码: https ://github.com/mitchwongho/Andy/tree/master/Andy/src/com/andy/fragments/tabs

于 2012-05-15T17:09:19.707 回答