【问题标题】:Fragment onResume doesn't get called after Fragment is being detached and then re-attached在 Fragment 被分离然后重新附加后,不会调用 Fragment onResume
【发布时间】:2012-04-24 21:18:37
【问题描述】:

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

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

在第一次显示每个 Fragment 时,一切正常,列表已填充,ActionBar 中的 MenuItems 也是如此。

但您第二次看到选项卡时(在切换和切换回之后),列表都不会被填充,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 在我切换标签后不会被调用,这绝对是错误的,因为我正在分离并重新连接它们...... 我是否以错误的方式切换标签?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 谢谢,我希望这是答案,虽然它不再相关,因为我切换到列表导航。 (在我的情况下更有意义,并且完美运行:))
    • 在我的情况下,在调用 'FragmentTransaction.commit()' 之前在片段#1 中调用 'FragmentTranaction.remove(fragment#1)' 有助于我强制片段#1 通过 onPause() .. . onDestroyView() 替换并通过 onCreateView() ... onResume() 当我返回到 fragment#1 时按下返回按钮。
    【解决方案2】:

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

    【讨论】:

    • 没有!如您所见,我正在实现 ActionBar.TabListener 接口。在 TabListener 回调中,您可以获得一个可供使用的 FragmentTransaction(即“开始”),并且您不得按照文档明确说明的方式调用 commit。另外,碎片正在交换,所以不是这样……
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-24
    • 2019-11-11
    • 1970-01-01
    • 2013-03-05
    • 1970-01-01
    • 2012-01-03
    • 2014-02-20
    相关资源
    最近更新 更多