【问题标题】:Keep Android Fragments in Backstack将 Android 片段保留在 Backstack 中
【发布时间】:2022-02-15 22:45:00
【问题描述】:

我正在处理 android 片段,我无法将片段保留在后台堆栈中,即当我按下后退按钮时,它会将我推出启动片段的 Activity,我想在后台返回上一个片段。

到目前为止,我已经尝试过了,但我无法将片段保留在后台堆栈中。

getActivity().getFragmentManager().beginTransaction()
             .replace(R.id.mainContainer, searchResultsFragment)
             .addToBackStack(null)
             .commit();

【问题讨论】:

  • 感谢兄弟否决了它确实有帮助而没有提出任何建议:/
  • 这不是我投票,而是他为什么这样做,因为你必须在发布问题之前搜索,任何方式你的问题很容易我都会回答它
  • @MinaFawzy 我确实搜索了很多但我找不到任何东西所以我终于不得不在这里问了!

标签: android android-fragments


【解决方案1】:

在调用commit() 提交事务之前,您应该像在您提供的代码中所做的那样,将片段添加到后台堆栈addToBackStack(null)

然后覆盖onBackPressed() 以从堆栈中弹出片段

您面临的问题,您与FragmentManager进行交易

getActivity().getFragmentManager().beginTransaction()
             .replace(R.id.mainContainer, searchResultsFragment)
             .addToBackStack(null)
             .commit();

但是你在 onBackPressed() 你使用SupportFragmentManager

@Override
public void onBackPressed() {
    if (getSupportFragmentManager().getBackStackEntryCount() > 0 ) {
        getSupportFragmentManager().popBackStack();         
    }
}

要解决您的问题,您必须知道与您的片段类型匹配的内容(在您的情况下为 searchResultsFragment)我的意思是它是否扩展片段或支持片段

如果您扩展片段支持

import android.support.v4.app.Fragment;

你应该在事务和 onBackPressed 中都使用getSupportFragmentManager()

如果你使用片段

import android.app.Fragment;

你应该在事务和 onBackPressed 中都使用getFragmentManager()

【讨论】:

  • 感谢您的帮助,我会尝试然后在这里告诉您
  • 我按照你告诉我的那样覆盖 onBackPressed 并且其他答案给出了示例代码,但是“fragmentManager.getBackStackEntryCount()”总是返回“0”
  • 尝试在提交之后或之前添加executePendingTransactions()
【解决方案2】:

您必须在您的活动中覆盖 onBackPressed。仅将片段添加到后台堆栈是不够的。

@Override
public void onBackPressed() {
    FragmentManager fragmentManager = getSupportFragmentManager();
    if(fragmentManager.getBackStackEntryCount() != 0) {
        fragmentManager.popBackStack();
    } else {
        super.onBackPressed();
    }
}

【讨论】:

  • 感谢您的回答,我会检查它,然后在这里通知您
  • fragmentManager.getBackStackEntryCount() 总是返回“0”
  • with .addToBackstack(null) ?
【解决方案3】:

我只是删除了这一行:

.addToBackStack(null)

对我有用。

【讨论】:

    猜你喜欢
    • 2012-12-30
    • 2014-09-26
    • 1970-01-01
    • 1970-01-01
    • 2018-01-21
    • 1970-01-01
    • 1970-01-01
    • 2017-04-08
    • 1970-01-01
    相关资源
    最近更新 更多