首先,让我们创建一个interface。
interface MyInterface {
fun onSomethingDone(someData: Int) //A sample function, you can customize it your needs.
}
那么
像这样在您的活动中覆盖onAttachFragment。永远记住这条规则,永远不要将片段与活动紧密耦合。因此,您可以做的是检查片段并进行相关操作,如下所示:
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
}
}
}
这将确保您不会像在设置自定义侦听器时将片段强制转换为特定活动的上下文那样紧密耦合片段。
让我们转到片段
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.
}
}
}
这个示例片段类应该让您充分了解它是如何设置的。就像这个片段类的实现方式一样,您可以对 Fragment2 和 Fragment3 执行相同的操作。
回到我们的活动
但这一次,我们将实现一个监听器方法。
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 开发的一部分,它提供了各种优势,而不仅仅是片段和活动之间的相互通信。