使用 Safe Args 将数据从 Activity 传递到 Fragment

Passing data from Activity to Fragment using Safe Args

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

传递数据的可能性

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

这里是我何时需要这个的简短描述:

<- 登录屏幕 ->(主 activity)- 无碎片,简单登录 ACTIVITY

-- 用户输入数据

-- 点击登录

-- 登录成功

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

<- 个人资料页面 -> (ProfilePage Activity) 抽屉式布局使用 NavHostFragment 显示不同的片段:[个人资料页面]、[联系信息]、[支付卡]

-- 个人资料页面片段

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

这是我遇到问题的地方 - 我不知道如何将数据从实际 Activity 传递到 Fragment,尤其是当我知道有所谓的 SafeArgs 时,我对.

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

是的,如您所料,您必须使用安全参数才能将其作为最佳选择。

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

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

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

您应该考虑为安全参数添加类路径和插件。

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

和插件:

apply plugin: "androidx.navigation.safeargs"

您的安全参数将为您生成 类,然后以这种方式传递数据:

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

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