无法添加到Fragment Back Stack

时间:2014-10-27 17:00:13

标签: android android-fragments back-stack fragmenttransaction

我打开“活动A”。 “活动A”立即执行FragmentTransaction这样打开“片段A”:

FragmentTransaction t = fm.beginTransaction();
ListFragment f = new ProfileFragment();
t.replace(R.id.main_frag, f, "act_frag");
f.setArguments(args);
t.commit();

“片段A”上面有一个按钮,我想打开一个新的Fragment(“片段B”),但在后台堆叠中保留“片段A” - 所以如果用户回击,它仍然存在。所以我这样做:

FragmentTransaction t = fm.beginTransaction();
ListFragment f = new FollowFragment();
String username = tvUser.getText().toString();
Bundle args = new Bundle();
args.putString("follow", "watching");
args.putString("userprofile", username);
args.putInt("userIdprofile", userId);
f.setArguments(args);
t.replace(R.id.main_frag, f, "watching_frag");
t.addToBackStack("watching_frag");
t.commit();

我想通过添加t.addToBackStack(null);可以做到这一点;我就是这样做过的。但相反,当用户回击时,它只会关闭“活动A”。

2 个答案:

答案 0 :(得分:1)

默认情况下,按下后退按钮时,活动将关闭。我认为,对于你要做的事情,你必须覆盖onBackPressed方法并添加代码来处理 例如:

@Override
public void onBackPressed() {

    FragmentManager fm = getSupportFragmentManager();
    if(fm.getBackStackEntryCount() > 0){
        fm.popBackStack();
        return;
    }
    super.onBackPressed();
}

这样,当按下后退时,它会首先检查是否有任何后退条目,并在按下后退时弹回,如果没有,则调用默认动作。

答案 1 :(得分:0)

您是否尝试在t.addtoBackStack中添加一些值而不是null? 我现在无法测试它,但我认为这可能是你的问题。