【问题标题】:Passing data from Activity to Fragment using Safe Args使用 Safe Args 将数据从 Activity 传递到 Fragment
【发布时间】:2020-06-10 16:41:13
【问题描述】:

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

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

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

(主要活动)- 没有碎片,简单的登录活动

-- 用户输入数据

-- 点击登录

-- 登录成功

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

(ProfilePage Activity) 带有使用 NavHostFragment 显示不同 Fragment 的抽屉布局:[Profile Page]、[Contact Info]、[Payment Cards]

-- 个人资料页面片段

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

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

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

【问题讨论】:

    标签: android android-fragments kotlin android-jetpack


    【解决方案1】:

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

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

    您还可以看到参数是在 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)
        }
    

    这样,您可以对片段或片段之间的活动执行此操作。

    【讨论】:

    • 这适用于片段之间的导航,但我不明白这将如何适用于活动和起始目的地之间的导航
    • 安全 args 对 Activity 和 Fragments mate 都有效!
    • 我终于想出了正确的方法,非常感谢您的帮助,非常感谢!
    • @Rey 你能帮帮我吗,你如何将参数从活动传递到片段。
    • @Rey 当我使用 navController.setGraph(R.navigation.main_navigation, CaseViolationGeneralFragment.newArgs(caViolationId)) 和 2.3.1 版本时它工作正常,但现在我已经将它更新到 2.3.2 和它现在不工作了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-23
    • 2013-07-26
    相关资源
    最近更新 更多