我正试图在http://developer.android.com/resources/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentTabs.html中将FragmentTabs实现为illiustrated。一切顺利,直到我这样做:
我从一个标签开始了许多不同的片段,如:
TAB1 - >片段1 ---> fragment2 ---> fragment3
TAB2
但是当我切换到tab2并再次回到tab1时,我得到的是fragment1屏幕而不是fragment3(即我在第一个标签中有3个片段,而我在第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()时,我得到了这个:
答案 0 :(得分: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
答案 1 :(得分:2)
我建议您保留onTabChanged
的原始代码,并使用addToBackStack
方法来维护片段的遍历状态。从一个片段转到下一个片段时调用addToBackStack
,例如add
或replace
片段。
同时更改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();
}
}