gpt4 book ai didi

android - Kotlin 是否有办法将接口(interface)的实现委托(delegate)给另一个类?

转载 作者:行者123 更新时间:2023-12-02 13:22:34 34 4
gpt4 key购买 nike

我正在为我的应用程序使用一个 Activity 和三个 fragment

每个 fragment 都有一个用于与逻辑通信的接口(interface)

Activity 实现了这个接口(interface)并使用相同的参数调用逻辑对象(一个持久 fragment ),所以它看起来像这样:

class Child : Fragment() {

private fun userInteraction() {
(activity as? ChildInteraction)?.askStuff()
}

interface ChildInteraction {
fun askStuff():Unit
}


}


class ParentActivity : AppCompatActivity(), ChildInteraction {

override fun askStuff() {
(supportFragmentManager.findFragmentByTag("LOGIC") as? ChildInteraction).askStuff()
}
}


class LogicFragment : Fragment(), ChildInteraction {

override fun askStuff() {
//do some work here
}

}

问题是,每个交互都有 5-10 个方法,而 ParentActivity 所做的只是传递消息,有没有办法简化传递?

我知道你不能在 Java 中做到这一点,但我希望 Kotlin 有办法做到这一点

最佳答案

看看 setTargetFragment getTargetFragment .以下是 fragment 到 fragment 通信的示例:

interface ChildInteraction {
companion object

fun askStuff()
}

fun ChildInteraction.Companion.wrap(f: Fragment) = (f.targetFragment as? ChildInteraction)

class Child1 : Fragment() {

private fun userInteraction() {
ChildInteraction.wrap(this)?.askStuff()
}
}

class Child2 : Fragment() {

private fun userInteraction() {
ChildInteraction.wrap(this)?.askStuff()
}
}

class LogicFragment : Fragment(), ChildInteraction {

override fun askStuff() {
//do some work here
}
}

class ParentActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

val logic ...

val child1 ...
child1.setTargetFragment(logic, 0)

val child2 ...
child2.setTargetFragment(logic, 0)
}
}

关于android - Kotlin 是否有办法将接口(interface)的实现委托(delegate)给另一个类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52056707/

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