Fragment分离然后重新附加后,片段onResume不会被调用

时间:2012-04-24 21:18:37

标签: java android android-fragments actionbarsherlock android-actionbar

我正在尝试获取所有新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没有被调用,因为我正在分离并重新附加它们,这是完全错误的... 我是否以错误的方式切换标签?

2 个答案:

答案 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