android - 使用安全参数将数据从 Activity 传递到 Fragment

标签 android android-fragments kotlin android-jetpack

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

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

以下是我何时需要此功能的简短描述:

<- 登录屏幕 ->(主要 Activity )- 无 fragment ,简单的登录 Activity

-- 用户输入数据

-- 点击登录

-- 登录成功

-- 保存并发送 HTTP 响应数据以及其他必要信息,然后传输到个人资料页面

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

-- 个人资料页面 fragment

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

这就是我面临问题的地方 - 我不知道如何将数据从实际的 Activity 传递到 Fragment,特别是当我知道有所谓的 SafeArgs 时,我对此只有一个模糊的理解。

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

最佳答案

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

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

您还可以看到该参数是在 XML 中添加的。单击“文本”选项卡切换到 XML View ,您会发现您的参数已添加到接收该参数的目标中。示例如下:

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

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

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)
    }

这样您就可以对 fragment 或 fragment 之间的 Activity 执行此操作。

关于android - 使用安全参数将数据从 Activity 传递到 Fragment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62308730/

相关文章:

android - 毫秒日期格式仅显示 SSS

oop - Actor 阵容永远不会成功

android - eclipse 中图像的无效文件名错误

java - 安卓:自动注销

Android:根据所选设备选择不同的布局

android - 弹出 fragment 后的多个 LiveData 观察者

android - 一个 Activity 中有多个 ListView 。安卓?

android - ViewPager——垂直和水平同时实现

android - 多 Activity 或单 Activity 和多个 fragment

Android 回收站 View 最初总是空的