使用视图绑定访问另一个活动的 UI 元素

Posted

技术标签:

【中文标题】使用视图绑定访问另一个活动的 UI 元素【英文标题】:Access another activity's UI element using view binding 【发布时间】:2022-01-02 18:44:06 【问题描述】:

我有一个带有“下一步”按钮的活动,在该按钮下我有用于片段的 NavHostController。我正在使用该按钮导航使用 NavComponemts grapgh 的片段。我在活动中的按钮上设置了点击列表,它将调用片段中的一个函数,该函数将导航到下一个片段。但是当我在最后一个片段上时,我想隐藏那个按钮。那个问题。

我们可以简单地使用 kotlin 合成访问另一个活动的 UI 元素。当迁移到喷气背包视图绑定时,我意识到binding 是该特定活动的私有,没有办法做到这一点。 没有关于此的文档

【问题讨论】:

无论哪种方式,这样做都可能是一个可怕的想法。你要求的是错误和空指针,所以你可能不应该这样做。 @a_local_nobody 我有一个活动,其下方有一个“下一步”按钮,我有用于片段的 NavHostController。我正在使用该按钮导航使用 NavComponemts grapgh 的片段。我在活动中的按钮上设置了点击列表,它将调用片段中的一个函数,该函数将导航到下一个片段。但是当我在最后一个片段上时,我想隐藏那个按钮。那个问题 所有这些都是人们需要给你答案的信息,所以edit你的问题要包括所有这些信息,并确保你在将来提出问题时包括尽可能多的细节,相信你会找到答案的 请提供足够的代码,以便其他人更好地理解或重现问题。 【参考方案1】:

但是当我在最后一个片段上时,我想隐藏那个按钮。那个 问题。

您可以通过在父活动中添加一个函数(具有“下一步”按钮的活动)并在显示最后一个片段时调用它来实现这一点。

活动中:

fun hideNextBtn() 
    binding.btnNext.isVisible = false

在最后一个片段中:

(requireActivity() as MainActivity).hideNextBtn()

【讨论】:

【参考方案2】:

我不知道您为什么要从除了它所属的 Activity 或 Fragment 之外的任何地方访问或对任何 UI 元素进行任何更改。可能会导致。错误。

如果您愿意,您可以将调用 DataBinding.setContentView() 时获得的 DataBinding 对象设为 public,或者提供一个 getter 方法来访问该对象。

【讨论】:

我想根据用户在第一个活动的文本框中输入的内容更改另一个活动的文本视图 @notBot 要么使用 LocalBroadcast 发送此数据,要么在用户选择某些内容时启动新活动并通过捆绑发送所述数据 Use LocalBroadcast receiver for that. 这是一个坏主意,不能保证第二个活动仍然存在 - 一次只有一个活动处于活动状态,这是有原因的。不要破解这个,只需使用意图或带有片段的单个活动。有正确的方法来传递数据 @a_local_nobody 你是对的 @TaranmeetSingh 还有一个问题。我有一个活动,其下方有一个“下一步”按钮,我有用于片段的 NavHostController。我正在使用该按钮导航使用 NavComponemts grapgh 的片段。我在活动中的按钮上设置了点击列表,它将调用片段中的一个函数,该函数将导航到下一个片段。但是当我在最后一个片段上时,我想隐藏那个按钮。那个问题

以上是关于使用视图绑定访问另一个活动的 UI 元素的主要内容,如果未能解决你的问题,请参考以下文章

从另一个线程访问 UI 线程的视图

如何使用视图绑定访问 TextSwitcher 的子元素?

从另一个类 c++ 访问 UI 元素

您可以从另一个线程访问 UI 元素吗? (不设置)

在 Swift 3 UI 测试中访问自定义视图组件中的元素

如何从 JavaFX 中的另一个控制器类访问 UI 元素?