Fragment被分离再重新附加后,Fragment onResume方法不会被调用

5
我正在尝试掌握所有新的ActionBar和Fragments API。我有一个主Activity,想要管理两个不同的选项卡。为了支持比ICS更早的版本,我使用ActionBarSherlock。每个选项卡包含自己的Fragment(每个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);
        }
    }
}

在 onTabUnselect 事件中,我正在分离 Fragment:

@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个回答

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

谢谢,我希望这是答案,尽管它已经不相关了,因为我转向了列表导航(在我的情况下更有意义,而且完美地工作:)) - Avi Shukron
在我的情况下,在调用'FragmentTranaction.remove(fragment#1)'之前,先在fragment#1中调用它,然后再调用'FragmentTransaction.commit()'可以帮助我强制让fragment#1通过onPause() ... onDestroyView()进行替换,并在按下返回按钮返回到fragment#1时通过onCreateView() ... onResume()。 - Grigori A.

0

不是那样的!正如你所看到的,我正在实现ActionBar.TabListener接口。在TabListener回调中,你会得到一个准备好使用(也就是“已开始”的)FragmentTransaction对象,而你不能像文档明确说明的那样调用commit方法。 此外,这些片段正在被交换,所以不是那个问题... - Avi Shukron

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接