我使用一个Android库,要求我创建2个类,每个类继承自不同的类 .
(有一个共同的基类)
现在我有这个代码:
class IncomingFileMVH(itemView: View):
Lib.IncomingTextMVH(itemView) {
private val tv: TextView = itemView.findViewById(R.id.text)
override fun onBind(message: ChatMessage) {
super.onBind(message)
tv.text = message.text
}
}
我必须复制这个类来创建一个扩展 Lib.OutcomingTextMVH
的 OutcomingFileMVH
,即使我的两个类共享完全相同的代码 .
我简化了示例的代码,但重复可能很重要 .
我决定将我的代码放在这两个类之外的静态方法中,并在类重写方法中调用它们,但我认为必须有一种更清晰的方法来执行此操作 .
你能帮我解决这个问题吗?
Lib.OutcomingTextMVH
和 Lib.IncomingTextMVH
都从 Lib.BaseMVH
继承 .
1 回答
我看到一个解决方案,但如果
onBind
多次调用它可能会效率低下 . 将此代码放在一个文件中,以确保共享逻辑不会在其他任何地方公开:粗略地说这里的问题是我们无法在扩展属性中存储任何值 . 因此,每当调用
onBind
时,它也会调用itemView.findViewById(R.id.text)
.还有另一种我更喜欢的解决方案 . 为属性创建 Contract 接口,为两个类实现它,并为
onBind()
创建帮助器扩展方法是的,您需要使用
View
复制所有属性,但是像以前一样,所有绑定逻辑都放在单个方法和 all properties initialized once 中 .