notifications - 从通知导航组件打开时避免片段重新创建
问题描述
当我单击通知以打开片段而不是重新创建它时,我想要。我正在使用导航组件并使用 NavDeepLinkBuilder
val pendingIntent = NavDeepLinkBuilder(this)
.setComponentName(MainActivity::class.java)
.setGraph(R.navigation.workouts_graph)
.setDestination(R.id.workoutFragment)
.createPendingIntent()
我的情况是我有一个片段,当你退出应用程序时,会有一个通知,当你点击它时,它应该让你回到同一个片段。问题是每次我点击它都会再次创建这个片段,我不想被重新创建。
解决方案
我遇到过同样的问题。看起来没有根据文档在不清除堆栈的情况下使用 NavDeepLinkBuilder 的选项
我不确定你的行为的确切性质,但我会做出两个假设:
- 您将目标 ID 传递给 MainActivity 以进行导航。
- 您的 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)
}
}
推荐阅读
- android - 在缓存中发现损坏的 IndexBlock 31322。与 /.gradle/caches/journal-1/file-access.bin 相关
- user-interface - 在哪里可以找到 HTML 选择小部件的规范?
- c++ - 如何避免创建空对象?
- angular - 角度路由器按需销毁路由的存储组件
- hyperlink - 在 Kentico 报告中创建链接
- objective-c - Objective-C 字符串中是否有占位符说明符?
- unity3d - 导入统一 2Dgame 套件显示一些错误
- java - Android 批量插入或忽略 JSONArray
- r - Plotly 代码 - 查看器图表不显示
- xaml - 如何在保持 ScrollViewer 启用的同时动态更新 ListView 高度?