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

时间:2020-06-10 16:41:13

标签: android android-fragments kotlin android-jetpack

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

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

以下是我何时需要此功能的简短说明:

<-登录屏幕->(主要活动)-无片段,简单的登录活动

-用户输入数据

-单击登录

-登录成功

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

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

-个人资料页面片段

-提取Main Acitivity发送的数据并使用它来更改ProfilePage片段TextViews的值

这是我面临的问题-我不知道如何将数据从实际的Activity传递到Fragment,尤其是当我知道存在所谓的SafeArgs时,我只是不清楚地知道它。

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

1 个答案:

答案 0 :(得分:3)

是的,您已经猜到了,您必须使用安全的参数才能使其成为最佳选择。

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

您还可以看到该参数是在XML中添加的。单击“文本”选项卡以切换到XML视图,并注意您的参数已添加到接收该参数的目标位置。一个示例如下所示:

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

您应该考虑为safe-args添加类路径和插件。

def nav_version = "2.3.0-beta01"
    classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"

和插件:

apply plugin: "androidx.navigation.safeargs"

您的safe-args将为您生成类,然后以这种方式传递数据:

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

这样,您既可以对片段进行活动,也可以对片段之间进行活动。