【问题标题】:Fragment still visible after pressing the back button按下后退按钮后仍然可见片段
【发布时间】:2014-04-02 08:33:44
【问题描述】:

我想要一个片段,它提供了创建某些东西的能力。 之后我想在另一个片段中展示新的“someting”。按下设备上的后退按钮后,我想返回 MainFragment 而不是 CreateFragment(这很好用)。但在那之后 ShowFragment 仍然可见。

这是我的代码:

在我的MainActivity 中,我有一个MainFragment,它有一个“创建”按钮。

点击按钮后,我会加载一个“创建”片段。

fragmentManager.beginTransaction()
           .replace(R.id.container, CreateFragment.newInstance())
           .addToBackStack("Create")
           .commit();

如果用户输入了一些详细信息,他会点击“确定”按钮。这会在 MainActivity 上触发以下内容。

fragmentManager.beginTransaction()
            .replace(R.id.container, ShowFragment.newInstance(id))
            .commit();

到目前为止一切顺利,但问题来了。

如果用户点击设备上的后退按钮,他将返回 MainFragment 但ShowFragment 仍然可见(在MainFragment 下)。

更新

会发生这样的事情:

MainFragment > CreateFragment > ShowFragment > (BACK 按钮) > MainFragment (ShowFragment 在后面)

【问题讨论】:

  • 只需删除行.addToBackStack("Create"),您将不会再次重定向到CreateFragment。它显示CreateFragment,因为您已将该片段添加到堆栈中。
  • 我没有回到 CreateFragment。我回到 MainFragment (这就是我想要的)。但 ShowFragment 仍然可见。
  • 什么是id in line ShowFragment.newInstance(id)
  • 这只是新“某物”的 id(一个参数)
  • 手动从 R.id.container 中删除怎么样?

标签: android android-fragments


【解决方案1】:

只需在onBackPress 事件上从堆栈中弹出ShowFragment,如下所示:

@Override
public void onBackPressed() {
    final Fragment fragment = fragmentManager.findFragmentById(R.id.container);
    if (fragment != null) {
        fragmentManager.popBackStack();
    } else {
        super.onBackPressed();
    }
}

【讨论】:

    【解决方案2】:

    在您的ShowFragment 片段中按下片段ShowFragment 的后退按钮将调用onBackPressed() 方法。然后当您调用方法popBackStack() 时,它会将您返回到CreateFragment

    示例代码 -

    public void onBackPressed()
    {
      FragmentManager fm = getActivity().getSupportFragmentManager();
      fm.popBackStack();
    }
    

    查看帖子how-to-back-to-previous-fragment-on-pressing-manually-back-button-of-indivisual-fragment了解更多类似情况的信息。

    【讨论】:

    • 投反对票的原因。如果可以提供帮助,代码中有什么问题。
    • 1) 此代码与 Activity onBackPressed() 默认实现几乎相同,并且需要 Fragment 修改和显式调用。 2)解释很不清楚,它以“按片段的后退按钮”开头,但片段本身没有/处理后退按钮。
    • 查看 OP 的更新 - ShowFragment > (BACK Button)。片段显然有后退按钮。显式调用是在事务中提交后如何返回堆栈。
    • 我确定 OP 的意思是“显示 ShowFragment,然后按下 Activity 的后退按钮”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多