我正在尝试获取所有新ActionBar和Fragments API的句柄。 我有一个主要活动,我希望它管理两个不同的选项卡。 我正在使用ActionBarSherlock以支持比ICS更旧的版本。
每个标签都包含自己的Fragment
(每个标签都是SherlockListFragment
的子类)
我让它的工作基本上很好,但我有一个问题,我确定这是愚蠢的,但我还是想不通:
第一次显示每个片段时,一切正常,列表已填充,因此ActionBtem位于ActionBar中。
但是第二次看到一个标签(在swicth和switch-back之后),列表都没有填充,也没有ActionBar MenuItems。
这就是我切换标签的方式:
@Override
public void onTabSelected(Tab tab, FragmentTransaction transaction) {
SherlockListFragment toAttach = // Find the right fragment here...
if (toAttach != null) {
if (toAttach.isAdded() == false) {
transaction.add(R.id.tab_placeholder, toAttach,
REMINDER_FRAGMENT_TAG);
} else {
transaction.attach(toAttach);
}
}
}
onTabUneselect我正在分离碎片:
@Override
public void onTabUnselected(Tab tab, FragmentTransaction transaction) {
SherlockListFragment toDetach = // Find the right fragment
if (toDetach != null) {
transaction.detach(toDetach);
}
}
我正在onResume中填充列表和ActionBar菜单:
@Override
public void onResume() {
super.onResume();
setHasOptionsMenu(true);
fillRemindersList();
}
我也在onStart和onCreateView上尝试了它,但它没有帮助......
那我在这里错过了什么? 如果我的代码中还有其他问题我不知道,请告诉我们。
谢谢!
修改
我刚刚确认在切换标签后onResume
没有被调用,因为我正在分离并重新附加它们,这是完全错误的...
我是否以错误的方式切换标签?
答案 0 :(得分:2)
尝试在onTabUnlected中使用transaction.remove(fragment),在onTabSelected中使用transaction.replace。
答案 1 :(得分:0)
在这段代码之外做beginTransaction()和commit()我假设或者你忘记了吗? 你可以从样本中看到这里使用的技巧: https://github.com/JakeWharton/ActionBarSherlock/blob/master/samples/fragments/src/com/actionbarsherlock/sample/fragments/FragmentTabs.java