在 NavigationUI 的同一主机活动上传递数据并更新片段文本/按钮

Posted

技术标签:

【中文标题】在 NavigationUI 的同一主机活动上传递数据并更新片段文本/按钮【英文标题】:Pass data and update fragments text/buttons on same host activity of NavigationUI 【发布时间】:2021-05-21 04:01:42 【问题描述】:

在托管导航抽屉的活动中,我在菜单上有“登录”组件,用于管理谷歌身份验证。我想在另一个“主页”片段上传播用户的信息并使用这些信息更新其视图。

问题: 如何在NavigationUI 中同一主机活动的两个片段之间传递数据,以及如何一次性更新“Home”片段的 TextView(因为视图会刷新它的一直都是默认值)。

我尝试使用 intents,向主要活动指定要接收的附加内容,以便我可以将它们传播到片段,但它似乎不起作用(得到“找不到活动”错误)。 我错过了什么?

【问题讨论】:

【参考方案1】:

实际上,您已经提出了多个问题,试图回答所有问题。

    如何在同一宿主活动的两个片段之间传递数据

如果您使用 ViewModel,请使用 LiveData 在两个片段之间进行通信。 - 建议的方法

如果您不使用 ViewModel,请使用接口回调方法。

这里提到了以上两个的例子。

https://developer.android.com/guide/fragments/communicate

    如何使用 NavigationUI 在同一主机活动的两个片段之间传递数据

在 nav_graph.xml 中,您可以找到参数部分,您可以在其中提及要传递的参数。

在给定的链接中提供了一个示例 https://developer.android.com/guide/navigation/navigation-pass-data

如果您需要更多答案,请添加评论

【讨论】:

谢谢你,这对我帮助很大。经过一些尝试,我能够实现片段之间的消息传递(使用 arguments 部分)以及主机活动(使用 ViewModel)。现在的问题是,每次我单击一个片段时,它的视图都会刷新并且所有更新都会丢失。是关于片段生命周期方法的吗?我应该使用 savedIstanceState 吗? @tbekajon 我们在这里谈论登录,为什么不将数据保存在共享首选项中并在片段中使用该数据?每次单击片段时,可能会创建一个没有旧信息的新实例

以上是关于在 NavigationUI 的同一主机活动上传递数据并更新片段文本/按钮的主要内容,如果未能解决你的问题,请参考以下文章

将 Ansible 变量从一个角色(在一个主机上运行)传递给在同一剧本中的另一台主机上运行的另一个角色

带有操作栏图标单击的 NavigationUI 导致片段淡入淡出

在 NavigationUI、Android Studio 中停止页面刷新

Android Jetpack NavigationUI 设置AppBar的menu

Ansible-playbook 同一组相同主机

深入浅出 NavigationUI | MAD Skills