gpt4 book ai didi

android - 在 Kotlin for Android 中触发接口(interface)

转载 作者:行者123 更新时间:2023-11-29 15:37:07 26 4
gpt4 key购买 nike

在使用 Kotlin for Android 时,有一个特定的接口(interface)实现:从 fragment 触发接口(interface)。考虑 Fragment 必须将 UI 操作传达给父 Activity 的常见场景。在 Java 中,我们将定义接口(interface),创建它的“监听器”实例,并在接口(interface)父级中实现/覆盖操作。创建一个监听器实例对我来说不是那么简单。经过一些谷歌搜索,我找到了一个实现示例,但我不明白它为什么有效。有一个更好的方法吗?为什么一定要按下面的方式实现?

    class ImplementingFragment : Fragment(){

private lateinit var listener: FragmentEvent
private lateinit var vFab: FloatingActionButton

//Here is the key piece of code which triggers the interface which is befuddling to me
override fun onAttach(context: Context?) {
super.onAttach(context)
if(context is FragmentEvent) {
listener = context
}
}

//Notice the onClickListener using our interface listener member variable
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
val v: View? = inflater.inflate(R.layout.fragment_layout, container, false)
vFab = v?.findViewById(R.id.fh_fab)
vFab.setOnClickListener{listener.SomethingHappened()}
return v
}


}



interface FragmentEvent{
fun SomethingHappened()
}

最佳答案

在这段代码中,lateinit var listener: FragmentEvent 应该被初始化并且不能是null。所以 onAttach 应该看起来像

override fun onAttach(context: Context?) {
super.onAttach(context)
if (context is FragmentEvent) {
listener = context
} else {
throw RuntimeException(context!!.toString() + " must implement FragmentEvent")
}
}

在这种情况下,如果您忘记在 Activity 中实现 FragmentEvent,您将得到一个异常,否则回调就可以使用了。

关于android - 在 Kotlin for Android 中触发接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47513664/

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