Android 使用安全参数将数据从活动传递到片段

Android 使用安全参数将数据从活动传递到片段,android,android-fragments,kotlin,android-jetpack,Android,Android Fragments,Kotlin,Android Jetpack,由于我的需要,我最近开始研究更高级的Android开发。 从导航组件开始,我了解了使用片段的方法以及使用SafeArgs传递数据的可能性 虽然我能够理解并找到关于如何在不同片段之间传递数据的信息,但我没有找到关于如何将数据从实际活动传递到片段的任何信息 以下是我需要这个的简短描述: (主活动)-无片段,简单登录活动 --用户输入数据 --单击“登录” --登录成功 --保存和发送HTTP响应数据以及其他必要信息,并传输到配置文件页面 (ProfilePage活动),抽屉布局使用NavHostFr

由于我的需要,我最近开始研究更高级的Android开发。 从导航组件开始,我了解了使用片段的方法以及使用SafeArgs传递数据的可能性

虽然我能够理解并找到关于如何在不同片段之间传递数据的信息,但我没有找到关于如何将数据从实际活动传递到片段的任何信息

以下是我需要这个的简短描述:

(主活动)-无片段,简单登录活动

--用户输入数据

--单击“登录”

--登录成功

--保存和发送HTTP响应数据以及其他必要信息,并传输到配置文件页面

(ProfilePage活动),抽屉布局使用NavHostFragment显示不同的片段:[配置文件页],[联系信息],[支付卡]

--配置文件页面片段

--提取由Main Activity发送的数据,并使用它更改ProfilePage Fragment TextView的值

这就是我面临的问题所在——我不知道如何将数据从实际活动传递到片段,尤其是当我知道存在所谓的安全参数时,我只是有一个模糊的不了解


有人能帮我更好地理解这一点,或者至少为我指出正确的方向吗?

是的,正如您所猜测的,您必须使用安全参数才能将其作为最佳选项

在导航编辑器中,单击接收参数的目标。 在属性面板中,单击添加(+)。 在出现的“添加参数链接”窗口中,输入参数名称、参数类型、参数是否可为空以及默认值(如果需要)。 单击添加。请注意,该参数现在显示在“属性”面板的“参数”列表中。 接下来,单击相应的操作,将您带到该目的地。在属性面板中,您现在应该可以在参数默认值部分看到新添加的参数

您还可以看到参数是以XML形式添加的。单击文本选项卡切换到XML视图,注意您的参数已添加到接收参数的目标。示例如下所示:

 <fragment android:id="@+id/myFragment" >
 <argument
     android:name="myArg"
     app:argType="integer"
     android:defaultValue="0" />
和插件:

apply plugin: "androidx.navigation.safeargs"
您的安全参数将为您生成类,然后通过以下方式传递数据:

override fun onClick(v: View) {
        val name = textview.text.toString()
        val action = ThisFragmentDirections.ThatFragmentAction(name)
        v.findNavController().navigate(action)
    }

通过这种方式,您可以对活动到片段或片段之间执行此操作。

这适用于片段之间的导航,但我看不出这对活动和开始目的地之间的导航有何作用安全参数适用于活动和片段!我终于找到了正确的方法,非常感谢您的帮助,非常感谢@Rey能否请您帮助我,如何将参数从“活动”传递到“片段”。@Rey在使用2.3.1版本的navController.setGraph(R.navigation.main_navigation,CaseViolationGeneralFragment.newArgs(caViolationId))时工作正常,但现在我已将其更新为2.3.2,它现在无法工作。
override fun onClick(v: View) {
        val name = textview.text.toString()
        val action = ThisFragmentDirections.ThatFragmentAction(name)
        v.findNavController().navigate(action)
    }