【发布时间】:2012-05-22 23:02:54
【问题描述】:
我正在尝试按照http://developer.android.com/resources/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentTabs.html 中的说明实现 FragmentTabs。在我这样做之前一切都很顺利:
我从一个标签开始了许多不同的片段,例如:
tab1-->fragment1--->fragment2--->fragment3
tab2
但是当我切换到 tab2 并再次回到 tab1 时,我得到的是 fragment1 屏幕而不是 fragment3(即我在第一个标签中有 3 个片段,而我在第三个片段上,我在切换到第二个标签后再次出现在第一个标签上,我被带到第 1 个片段而不是第 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() 时,我明白了:
【问题讨论】:
-
您在这里没有太多信息可以让我们找到问题所在。如果有的话,请将代码粘贴到您要设置 TabHost/TabManager 的位置,并将选项卡添加到其中,如示例所示。
-
我指的是我在问题中给出的链接。
-
我以前亲自使用过该示例源,并且它可以正常工作。我要求您使用它,因为这可能是您的实施中的一个问题。
-
如果你用过这个例子,那么你一定知道我们必须在添加标签的地方给出片段类的名称。我也在这样做..现在从那个片段类开始我开始一个新的片段..现在的问题是,当我在让我们说第三个片段并且我切换到其他选项卡然后再次来到第一个选项卡..我被转发到不应该发生的片段1屏幕时,它应该只保留在当前选项卡上..我认为必须修改 onTabChanged() ..你能告诉我如何从我切换到第二个选项卡的地方保持在 sameFragment 上..?
-
问题区域是您的
onTabChanged(String tabId)覆盖。将此代码添加到您的帖子中。
标签: android android-fragments android-tabhost android-tabs