从活动中更改片段的变量值

Posted

技术标签:

【中文标题】从活动中更改片段的变量值【英文标题】:Changing variable's value of fragment from the activity 【发布时间】:2019-05-15 10:29:49 【问题描述】:

我有这样的活动:

工具栏上有2个按钮A和B,还有一个框架供片段接管。假设我在片段中有一个名为 button_type 的字符串变量。

我想要一个系统,当我点击activity中的按钮A时,片段中的button_type设置为A,当我点击activity中的按钮B时,片段中的button_type设置为B。 这个怎么做?

请注意,当片段已经处于活动状态时,我可能会单击按钮(A,B)(不像我单击一个按钮后片段会出现。)

提前致谢。

编辑: 目前我正在尝试这个:

在 MainActivity 我得到类似的字符串button_type 并根据按钮单击将其设置为 AB 并使用方法:

public String getData()return button_type;

在片段中我使用:button_type= activity.getData(); in onViewCreated。

但是好像只有AB的初始设定值(也就是A),并且当另一个按钮时不会改变被点击。

【问题讨论】:

你有你的片段实例。因此,为两个片段中的集合数据创建公共方法,并使用特定片段的实例使用该方法。 请详细说明。我尝试使用公共方法,但它不起作用。所以我需要一个详细的解释来找出我做错的地方。 显示方法你是怎么做到的? 请检查已编辑的问题。 【参考方案1】:

我认为最好的方法是使用interface 来管理片段中的文本。片段将实现接口。当按钮点击时,调用fragment中实现的函数。

另一种方法是使用findFragmentByTag()findFragmentById() 创建片段对象,然后在片段中调用处理文本的函数。

【讨论】:

我明白了。给我一个赞!【参考方案2】:

使用方法onClickA(String buttonType)onClickB(String buttonType) 创建一个interface。 然后创建一个实现这个接口的对象(或者让fragment自己实现这个接口)。我将调用此对象侦听器。 在侦听器方法实现中调用setButtonType(String buttonType)。 然后将您的侦听器传递给活动(您可以使用getActivity() 在片段中获取父活动的实例并将其转换为您的活动类)并在按钮A(在活动中)的onClickListener 中调用listener.onClickA(yourString) 并对按钮执行相同的操作B.

【讨论】:

小提示而不是getActivity() 你可以使用requireActivity() 也只有一种方法可以通过检查参数的值来处理两个点击。

以上是关于从活动中更改片段的变量值的主要内容,如果未能解决你的问题,请参考以下文章

在本机 C++ 中将变量从 C# 编组为 void*,并在本机程序内更改 Managed/C# 中的变量值

如何在分配的变量值更改时停止变量更改C#

使用 C# 中的方法更改另一个范围内的变量值

JavaScript,当变量作为参数传递时更改函数内部的变量值[重复]

从 HTML 中提取 JavaScript 代码中的变量值

C#如何将新变量的基类中的变量值更改为派生类