为什么按下后退按钮时addToBackStack不起作用

时间:2014-11-16 08:44:48

标签: android android-fragments android-navigation

我很困惑。

我有一个活动A,片段F1和F2,当点击一个按钮时,我想隐藏F1并将F2添加到同一个地方,然后可以通过后退按钮返回F1。所以我做了如下。

    FragmentTransaction transaction = getFragmentManager().beginTransaction();
    transaction.hide(getFragmentManager().findFragmentByTag(CHAT_LIST_FRAGMENT_TAG));
    transaction.add(R.id.content_frame, MessageListFragment.newInstance(username, false));
    transaction.addToBackStack(null);
    transaction.commit();

但是当我按下后退按钮时,活动结束而不是返回F1。我尝试使用替换,结果是一样的。

唯一的解决办法是覆盖onBackPress方法吗?


更多

我尝试了下面的代码。

    FragmentTransaction transaction = getFragmentManager().beginTransaction();
    transaction.repalce(R.id.content_frame, MessageListFragment.newInstance(username, false));
    transaction.addToBackStack(null);
    transaction.commit();

但没有改变。

2 个答案:

答案 0 :(得分:1)

尝试使用replace()代替hide() + add()。这是相应的Android documentation

FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.content_frame, MessageListFragment.newInstance(username, false));
transaction.addToBackStack(null);
transaction.commit();

答案 1 :(得分:0)

            FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
            fragmentTransaction.replace(R.id.container, fragment);
            fragmentTransaction.addToBackStack(null);
            fragmentTransaction.commitAllowingStateLoss();

这很有效。可能需要“getSupportFragmentManager”而不是你的getFragmentManager

NB!不要“添加ToBackStack”根片段,否则,当你点击返回时,它会以空白屏幕结束,试图关闭应用程序。