我想当我点击一个通知时,打开一个片段,而不是重新创建它。我正在使用导航组件并使用NavDeepLinkBuilder。
val pendingIntent = NavDeepLinkBuilder(this)
.setComponentName(MainActivity::class.java)
.setGraph(R.navigation.workouts_graph)
.setDestination(R.id.workoutFragment)
.createPendingIntent()
我的情况是我有一个片段,当你退出应用时,有一个通知,当你点击它时,它应该返回到同一个片段。问题是每次我点击它的时候,它都会再次创建这个片段,我不希望被重新创建。
我也有同样的问题。看起来没有一个选项可以在不清除堆栈的情况下使用NavDeepLinkBuilder。文件
我不确定你的动作的确切性质,但我做两个假设。
你必须创建一个挂起的意图,比如。
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)
}
}