addToBackStack()无效

5
我有一个负责管理两个Fragment的MainActivity。 其中一个方法是ListFragment上的监听器接口,而MainActivity负责切换这些片段。
但出于某种原因,似乎addToBackStack不起作用。当我点击列表、切换到下一个片段,然后点击设备的返回按钮时……它只会跳出应用程序,回到设备主屏幕。
有人知道问题是什么吗?
@Override
public void OnSelectionChanged(Object object) {
    DetailFragment DetailFragment = (DetailFragment) getFragmentManager().findFragmentById(R.id.detail_fragment);

    if (DetailFragment != null) {
        DetailFragment.setTitle(object);
    } else {
        DetailFragment newDetailFragment = new DetailFragment();
        Bundle args = new Bundle();

        args.putSerializable(DetailFragment.KEY_POSITION,object);
        newDetailFragment.setArguments(args);
        FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();

        fragmentTransaction.replace(R.id.fragment_container, newDetailFragment);
        fragmentTransaction.addToBackStack(null);
        fragmentTransaction.commit();
    }
}

有人可以帮我吗? - Makoto
从上面的代码可以看出,DetailFragment对象永远不会为空,因为在if条件语句之前你已经创建了DetailFragment对象。所以if()语句总是会执行。 - sandeepmaaram
请检查此答案https://dev59.com/SYbca4cB1Zd3GeqPWX_5#27717201。 - sandeepmaaram
我已经用一个字符串替换了null(但以前我从来没有这样做过才能让它工作),但仍然不起作用。而且在提交之前,我调用了addToBackStack()。 - Makoto
在一个活动中,你必须执行onBackPressed()。https://dev59.com/SYbca4cB1Zd3GeqPWX_5#27717201 - sandeepmaaram
不好意思,很遗憾没有成功。 - Makoto
2个回答

4
你应该在MainActivity中添加这个方法。
@Override
public void onBackPressed() {
    FragmentManager fm = getFragmentManager();
    if (fm.getBackStackEntryCount() > 0) {
        fm.popBackStack();
    } else {
        super.onBackPressed();
    }
}

请检查你的导入,使用android.app.而不是android.support.v4.app.

例如:

import android.app.FragmentManager;

改为:

import android.support.v4.app.FragmentManager;

1
如果你在活动中使用extends AppCompatActivity,请使用支持库中的导入。然后将调用从getFragmentManager()更改为getSupportFragmentManager()。这应该可以正常工作。我最近在我的一个项目中也遇到了这个问题。我是在这里了解到的:https://teamtreehouse.com/library/android-fragments/managing-fragments/managing-the-back-stack。但是,这是一个付费的在线学习解决方案,所以我不确定你是否能够看到它。他们偶尔会有一些对公众开放的视频。如果你正在使用extends Activity并想继续使用getFragmentManager(),那么你需要使用import android.app.FragmentManager;。你不应该需要重写onBackPressed()方法。虽然它在这些情况下确实有效,但更像是一种hack而不是解决方案。

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