通过NavGraph将数据从片段发送到主要活动中

问题描述 投票:1回答:1

[在我的应用中,我正在使用具有多个片段架构的单个活动,并使用导航库在它们之间进行导航。在一个片段中,我有多个类别,每个类别都与一个ID相关联。单击类别后,我将使用以下代码将用户带到相应的类别解释器屏幕。

    val directions = MainNavGraphDirections.launchFragmentWithThisCategoryId(categoryId!!)
            onRoute(AppRoute.Directions(directions))

上面的代码将它们发送到与关联的categoryId关联的解释器屏幕。到目前为止,一切都很好,根据categoryId启动了正确的解释器屏幕。在此解释器屏幕中,我有一个带有标签chatbot://fragment/wizardintro的深层链接,该标签应该让主要活动知道将用户发送到的特定后续片段。我用下面的代码表示可以接收此深层链接的所有片段。

companion object{
        const val DEEP_LINK = "chatbot://fragment/wizardintro"
    }  

在MainActivity中,我有一个方法可以接收所有不同的深层链接意图,并将它们与标记匹配,这些标记将使用下面的代码启动相应的类别片段。

 override fun onNewIntent(intent: Intent?) {
        super.onNewIntent(intent)
        intent?.data?.toString().also { deepLink ->
            when (deepLink) {
               IntroductionFragment.DEEP_LINK ->{
                        val categoryId = intent?.getLongExtra("categoryId", 0L)
                        val directions = MainNavGraphDirections.actionGlobalGoalWizard(categoryId)
                        navController.popBackStack()
                        navController.navigate(directions)
                }    
    }

现在,当我尝试在主要活动中检索此categoryId并将其传递到下一个片段时,出现了我的问题。我什么也没得到,只有默认的Long被传递了。我认为该函数在MainActivity中重写了onNewIntent(intent:Intent?){}的乐趣,它可以接收任何意图。需要明确的是,这些意图是从解释器片段发送的,从技术上讲,它是一个加载json的片段。在json中有一个“ route”:{“ type”:“ route”,“ url”:“ chatbot:/// fragment / wizardintro”

在MainActivity中,onNewIntent函数接收这些意图,并用此行intent?.data?.toString().also ...解压缩它们,然后在when语句中选择具有匹配的chatbot:///fragment/wizardintro的片段

我说这一切都是为了说主要活动实际上并没有获得categoryId,它只是选择启动必要的片段,而实际上并没有与categoryId相关联的任何内容>

这使我认为第一次单击的categoryId实际上没有传递给MainActivity。尽管对我来说,将对象/数据从片段传递到活动似乎并不难。我想念什么?我可以读些什么,以进一步教育自己?感谢您的时间和回复!

[在我的应用中,我正在使用具有多个片段架构的单个活动,并使用导航库在它们之间进行导航。在一个片段中,我有多个类别,每个类别...

android-fragments kotlin android-activity android-navigation android-deep-link
1个回答
0
投票

由于已经得出MainActivity未获得categoryId的结论,所以只需要将categoryIddeep-link一起传递。

© www.soinside.com 2019 - 2024. All rights reserved.