gpt4 book ai didi

java - 如何将三个 fragment 的数据发送到单个 Activity ?

转载 作者:行者123 更新时间:2023-11-29 04:08:44 26 4
gpt4 key购买 nike

我有一个更简单的问题,但我无法在互联网上找到有关它的答案。事情是这样的:我有三个 fragment ,我需要将每个 fragment 的数据发送到一个 Activity ,然后打开另一个 Activity 。我打算使用一个界面来做到这一点。那么,我需要为每个 fragment 创建三个接口(interface)并在 Activity 中实现它们吗?我有三个实现为每个 Activity 获取数据?在编写代码之前,我需要它。提前致谢。

Demo image

最佳答案

首先,让我们创建一个接口(interface)

interface MyInterface {
fun onSomethingDone(someData: Int) //A sample function, you can customize it your needs.
}

然后

像这样在您的 Activity 中覆盖 onAttachFragment。永远记住这条规则,永远不要将 fragment 与 Activity 紧密耦合。因此,您可以做的是检查 fragment 并进行相关操作,如下所示:

class MyActivity : AppCompatActivity() {

override onAttachFragment(fragment: Fragment) {

when (fragment) { //A switch statement, checking using instanceOf() in Java.
is Fragment1 -> fragment.firstFragmentListener = this //Proviving context of your activity to public variable of each fragment.
is Fragment2 -> fragment.secondFragmentListener = this
is Fragment3 -> fragment.thirdFragmentListener = this
}
}
}

这将确保您在设置自定义监听器时不会将 fragment 紧密耦合,例如将其强制转换为特定 Activity 的上下文。

让我们移动到 fragment

 class Fragment1 : Fragment() {

var firstFragmentListener: MyInterface? = null //public member, we are accessing it in our activity method, look above!

override onCreate() {

myButton.setOnClickListener {
firstFragmentListener.onSomethingDone(999) // Just sending random integer as the method parameter.
}
}
}

这个示例 fragment 类应该让您充分了解它是如何设置的。就此 fragment 类的实现方式而言,您可以对 Fragment2 和 Fragment3 执行相同的操作。

回到我们的 Activity

但这一次,我们将实现一个监听器方法。

class MyActivity : AppCompatActivity(), MyInterface {

override fun onSomethingDone(someData: Int) {
when (someData) {
999 -> //Came from first fragment
1000 -> //Second fragment
1001 -> //Third fragment
}
}

override onAttachFragment(fragment: Fragment) {

when (fragment) { //A switch statement, checking using instanceOf() in Java.
is Fragment1 -> firstFragmentListener = this //Proviving context of your activity to public variable of each fragment.
is Fragment2 -> secondFragmentListener = this
is Fragment3 -> thirdFragmentListener = this
}
}
}

就这些吧,我会挂一个链接给你一个天马行空的想法。 Single interface for multiple fragments .而 ViewModel 是第二代 Android 开发的一部分,提供了各种优势,而不仅仅是 fragment 和 Activity 之间的相互通信。

关于java - 如何将三个 fragment 的数据发送到单个 Activity ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56516707/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com