【问题标题】: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。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-03-09
        • 2012-12-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-07
        • 2020-05-24
        • 2018-06-09
        相关资源
        最近更新 更多