【问题标题】:How to make a `NavHostFragment` respond to `onBackPressed` when inside another Fragment?如何在另一个 Fragment 中使“NavHostFragment”响应“onBackPressed”?
【发布时间】:2020-07-29 19:23:16
【问题描述】:

我有一个 Activity 和一个 NavHostFragment 嵌套在 Fragment 中:

  • Activity 的根View
    • Fragment
      • NavHostFragment

当我在 NavGraph 中导航时,正在为NavHostFragment 创建一个返回堆栈。但是只要我点击设备的后退按钮,应用程序就会关闭(好像没有 后退堆栈)。

我错过了什么吗? NavHostFragmentFragment 之间是否有任何耦合需要完成?

【问题讨论】:

    标签: android android-navigation android-navigation-graph


    【解决方案1】:

    正如interact programmatically with the Navigation component 中提到的,是对setPrimaryNavigationFragment()` 的调用将Fragments 连接到系统后退按钮。

    层次结构中的每个片段都必须设置setPrimaryNavigationFragment()。虽然NavHostFragment 可能会在您从 XML 膨胀并使用 app:defaultNavHost="true" 时调用它自己,但您还需要在父片段上显式调用它。

    // In your Activity's onCreate() when you add the parent fragment
    if (savedInstanceState == null) {
        Fragment parent = new ParentFragment();
        getSupportFragmentManager().beginTransaction()
            .add(R.id.container, parent)
            .setPrimaryNavigationFragment(parent)
            .commit();
    }
    

    【讨论】:

    • 感谢@ianhanniballake \o/ 的支持。它解决了问题:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多