【问题标题】:Can not add to Fragment Back Stack无法添加到 Fragment Back Stack
【发布时间】:2014-10-27 17:00:12
【问题描述】:

我打开“活动 A”。 “Activity A”立即执行FragmentTransaction 像这样打开“Fragment A”:

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

“Fragment A”上有一个按钮,我想打开一个新的Fragment(“Fragment B”),但将“Fragment 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”。

【问题讨论】:

  • 参考我的答案... stackoverflow.com/questions/14971780/…>
  • 参考我的答案... stackoverflow.com/questions/14971780/…>

标签: android android-fragments back-stack fragmenttransaction


【解决方案1】:

默认情况下,当按下返回按钮时,活动关闭。我认为对于您要执行的操作,您必须覆盖 onBackPressed 方法并添加代码来处理它 例如:

@Override
public void onBackPressed() {

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

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

【讨论】:

  • Wait.. 添加“Fragment B”的Fragment事务是发生在“Fragment A”还是Activity中?
  • 它在片段 B 中反复出现。现在我想起来了,如果我记得的话,这并不总是最佳实践。 (Fragments 相互交流)。但无论如何,我需要的重点仍然存在。
【解决方案2】:

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

【讨论】:

  • 谢谢,但这不起作用;我更改了上面的代码以反映我所做的。
  • 这很奇怪。我测试了你的代码,它工作得很好。您是否有机会覆盖 onBackPressed()?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多