【问题标题】:Can not navigate while app is in background应用在后台时无法导航
【发布时间】:2019-11-15 07:50:04
【问题描述】:

我使用导航组件在片段之间导航。

在主要活动中初始化导航:

val navHostFragment = NavHostFragment.create(R.navigation.nav_graph)
supportFragmentManager
        .beginTransaction()
        .replace(R.id.container, navHostFragment)
        .commit()

在启动片段中导航到另一个片段:

findNavController().navigate(SplashFragmentDirections.actionSplashFragmentToHomeActivity())

在启动时我进行身份验证,这需要一些时间,在身份验证后我导航到主页片段。 如果我在启动片段中最小化应用程序(按主页按钮),则导航()不起作用,当我再次打开应用程序时,它仍保留在启动片段中

在控制台中:

NavController: Ignoring popBackStack to destination my.app/homeFragment as it was not found on the current back stack
FragmentNavigator: Ignoring navigate() call: FragmentManager has already saved its state

【问题讨论】:

    标签: android android-jetpack android-architecture-navigation


    【解决方案1】:

    当您收到身份验证回调时,测试您的应用是否在前台,如果是,请导航。如果您的应用在后台,则不执行任何操作。

    在启动画面的 onResume 方法中,测试您的用户是否已通过身份验证。如果是这样,请跳过您的启动画面。

    【讨论】:

    • 是的,我就是这么做的。但我认为这是一种糟糕而愚蠢的方式。
    • 这是一些争论!那就让你自助
    • 对不起,我不想冒犯你。我的意思是我使用了相同的解决方案,但在我看来这是一个不好的方法
    【解决方案2】:

    更强大的解决方案是在 onPause 上分离导航组件。 当导航逻辑不可用时,将这些导航操作添加到队列中。

    当您恢复时,恢复导航组件并执行队列中所有待处理的操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多