我想在单击通知时打开一个片段而不重新创建它。我正在使用导航组件并使用NavDeepLinkBuilder
val pendingIntent = NavDeepLinkBuilder(this)
.setComponentName(MainActivity::class.java)
.setGraph(R.navigation.workouts_graph)
.setDestination(R.id.workoutFragment)
.createPendingIntent()
我的情况是我有一个片段,当您退出应用程序时,会有一条通知,当您单击它时,它应该使您返回相同的片段。问题是每次单击它都会再次创建该片段,我不想重新创建。
答案 0 :(得分:0)
我有同样的问题。似乎没有选择可以使用NavDeepLinkBuilder而不根据documentation
清除堆栈我不确定您的操作的确切性质,但是我会做两个假设:
您将必须创建待处理的意图,例如:
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)
}
}