【问题标题】:Remove splash screen from backstack in navigation从导航中的后台堆栈中删除启动画面
【发布时间】:2021-02-18 11:15:19
【问题描述】:
我在应用程序中使用导航组件。我用片段 SplashScreen->fragmentA->fragmentB 创建了一个导航图。我正在使用 NavDeepLinkBuilder 为推送通知生成待处理意图,以在 fragmentB 处打开应用程序,如下所示:
val pendingIntent = NavDeepLinkBuilder(this)
.setGraph(R.navigation.navigation_graph)
.setDestination(R.id.fragmentB)
.setArguments(args.toBundle())
.createPendingIntent()
点击通知片段B后会打开,但点击后退按钮后会打开闪屏并再次打开应用程序。
【问题讨论】:
标签:
android
kotlin
notifications
android-architecture-navigation
【解决方案1】:
我不能在 kotlin 中完成这种工作,但我在 java 中完成了这项工作。这里有一个代码:
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
和
PendingIntent pendingIntent = PendingIntent.getActivity(this, j, intent, PendingIntent.FLAG_ONE_SHOT);
【解决方案2】:
您可以在 navigation_graph 的 FragmentB 动作中使用
<fragment android:id="@+id/fragmentB"
...
>
<action
...
app:popUpTo="@id/splash"
app:popUpToInclusive="true"/>
这会弹出后台堆栈中的片段,直到 SplashFragment 达到包括 SplashFragment 在内。这仅在启动画面是一项活动时才有效。如果是launcher Activity,启动MainActivity作为Navigation host,销毁SplashActivity。