安卓文档中提到,我可以使用TaskStackBuilder类来重新创建后退导航行为,当内部活动从其他方式启动时(从主页活动以外的方式),例如当用户点击通知栏时:
"通常,系统会逐步构建返回堆栈,因为用户从一个活动导航到另一个活动。然而,当用户通过深层链接进入您的应用并在其自己的任务中启动活动时,您需要合成新的返回堆栈,因为该活动在没有任何返回堆栈的新任务中运行。" - developers.android.com
没问题,但我的应用程序主要由片段和少量活动组成。我想从通知中启动内部片段(称之为FragmentC),因此当用户在通知栏中单击通知时,我的应用程序将打开baseActivity,并且此活动应重新创建FragmentC作为第一个显示的片段(我认为通过从通知意图传递一些参数并要求它在baseActivity中替换正在显示的片段来实现此目的),但在这种情况下,当用户向后导航时,应用程序会停止,因为只有一个活动处于活动状态,然后向用户显示主屏幕,这是错误的,我希望以这种方式重新创建片段流:
Notification clicked by the user ::
BaseActivity -> FragmentA -> FragmentB -> FragmentC (Visible)
Then the user navigate back ::
BaseActivity -> FragmentA -> FragmentB (Visible)
User navigate back ::
BaseActivity -> FragmentA (Visible)
User navigate back ::
(Application Finish, showing home screen)
有没有一种方法可以从通知栏中启动内部片段,并重新创建“正常”的后向导航流程,就像使用TaskStackBuilder类一样?或者你会用什么干净的方式做到这一点?
我想当我检测到片段是从通知中启动时,我可以在baseActivity中手动执行此操作,但对我来说这是不好的代码,我知道有一个TaskStackBuilder类可以更清晰地执行此操作,但我找不到如何在片段事务中使用它的任何信息。 :S
来源:
https://developer.android.com/training/implementing-navigation/temporal.html#SynthesizeBackStack
https://developer.android.com/training/implementing-navigation/temporal.html#back-fragments