[英]How to override a method of another class instance in Java/Kotlin?
I have a class with a Fragment instance in it and want to override the fragment methods.我有一个 class ,其中有一个 Fragment 实例,并且想要覆盖片段方法。 How can I make this kind of overriding here?我怎样才能在这里进行这种覆盖?
class MyClass(val fragment: Fragment) {
init {
fragment.onActivityCreated = onActivityCreated //what should be written?
}
fun onActivityCreated(savedInstanceState: Bundle?) {
actions()
super.onActivityCreated(savedInstanceState)
}
}
Thanks to a deleted answer, the completed mechanism looks like this:感谢删除的答案,完成的机制如下所示:
class MyClass<T>(private val viewModelPayments: PaymentsViewModel, val fragment: T) where T : Fragment, T : Featured {
init {
fragment.doOnActivityCreated(::onActivityCreated)
fragment.doOnActivityResult(::onActivityResult)
}
private fun onActivityCreated(savedInstanceState: Bundle?) {
//...
}
private fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
//...
}
}
interface Featured {
fun doOnActivityCreated(action: (savedInstanceState: Bundle?) -> Unit)
fun doOnActivityResult(action: (requestCode: Int, resultCode: Int, data: Intent?) -> Unit)
}
abstract class FeatureFragment : BaseFragment(), Featured {
private var onActivityCreatedAction: ((savedInstanceState: Bundle?) -> Unit)? = null
private var onActivityResultAction: ((requestCode: Int, resultCode: Int, data: Intent?) -> Unit)? = null
override fun doOnActivityCreated(action: (savedInstanceState: Bundle?) -> Unit) {
onActivityCreatedAction = action
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
onActivityCreatedAction?.invoke(savedInstanceState)
}
override fun doOnActivityResult(action: (requestCode: Int, resultCode: Int, data: Intent?) -> Unit) {
onActivityResultAction = action
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
onActivityResultAction?.invoke(requestCode, resultCode, data)
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.