片段在分离然后重新附加片段后不会调用恢复片段



我正在尝试获取所有新的ActionBar和Fragments API的句柄。我有一个主要活动,我希望它管理两个不同的选项卡。我正在使用ActionBarSherlock来支持比ICS更旧的版本。

每个选项卡都包含自己的Fragment(每个选项卡都是SherlockListFragment的子类)我让它基本上工作得很好,但我有一个问题,我确定这是愚蠢的,但我还无法弄清楚:

第一次显示每个片段时,一切正常,列表已填充,因此操作栏中的菜单项已填充。

但是第二次看到选项卡(切换和切换回来后)时,列表和动作栏菜单项都不会填充。

这就是我切换选项卡的方式:

@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);
        }
    }
}

在 TabUneselect 我正在分离片段:

@Override
public void onTabUnselected(Tab tab, FragmentTransaction transaction) {
    SherlockListFragment toDetach = // Find the right fragment
    if (toDetach != null) {
        transaction.detach(toDetach);
    }
}

我正在填充列表和 onResume 中的操作栏菜单:

@Override
public void onResume() {
    super.onResume();
    setHasOptionsMenu(true);
    fillRemindersList();
}

我也在onStart和onCreateView中尝试过,但它没有帮助......

那么我在这里错过了什么?如果我的代码中还有其他我不知道的问题,请告诉。

谢谢!

编辑:

我刚刚确认onResume切换选项卡后不会被调用,这绝对是错误的,因为我正在分离并重新连接它们......我切换标签的方式是否错误?

尝试在 onTabUnselected 中使用 transaction.remove(fragment),在 onTabSelected 中使用 transaction.replace 。

在此代码之外执行beginTransaction()和commit(),我假设还是您忘记了?您还可以从示例中看到此处使用的技巧:https://github.com/JakeWharton/ActionBarSherlock/blob/master/samples/fragments/src/com/actionbarsherlock/sample/fragments/FragmentTabs.java

最新更新