当从通知导航组件打开时,避免碎片重现。

问题描述 投票:0回答:1

我想当我点击一个通知时,打开一个片段,而不是重新创建它。我正在使用导航组件并使用NavDeepLinkBuilder。

 val pendingIntent = NavDeepLinkBuilder(this)
            .setComponentName(MainActivity::class.java)
            .setGraph(R.navigation.workouts_graph)
            .setDestination(R.id.workoutFragment)
            .createPendingIntent()

我的情况是我有一个片段,当你退出应用时,有一个通知,当你点击它时,它应该返回到同一个片段。问题是每次我点击它的时候,它都会再次创建这个片段,我不希望被重新创建。

notifications navigation fragment
1个回答
0
投票

我也有同样的问题。看起来没有一个选项可以在不清除堆栈的情况下使用NavDeepLinkBuilder。文件

我不确定你的动作的确切性质,但我做两个假设。

  1. 你把目标id传给你的MainActivity来导航。
  2. 你的MainActivity使用了ViewBinding,并且有一个NavHostFragment。

你必须创建一个挂起的意图,比如。

val intent = Intent(this, MainActivity::class.java).apply {
            flags = Intent.FLAG_ACTIVITY_SINGLE_TOP
            putExtra("destination", R.id.workoutFragment)
}
val pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);

在你的MainActivity中,你可以同时处理两种情况(应用已经打开,应用还没有打开)。

override fun onStart() {
    super.onStart()
    // called when application was not open
    intent?.let { processIntent(it) }
}

override fun onNewIntent(intent: Intent?) {
    super.onNewIntent(intent)
    // called when application was open
    intent?.let { processIntent(it) }
}

private fun processIntent(intent: Intent) {
    intent.extras?.getInt("destination")?.let {
        intent.removeExtra("destination")
        binding.navHostFragment.findNavController().navigate(it)
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.