如何使用Kotlin在Android中为自定义视图创建基类?

时间:2019-04-10 14:07:49

标签: android generics kotlin

我想为所有自定义视图创建基类。它可以是其他类型,例如RelativeLayoutNavigationView

所以我用泛型创建了abstract class,该泛型实现了将它们连接在一起的视图中最深的类-View。这就是我所拥有的:

abstract class MyCustomView<VS : ViewState, V : View<VS>, P : Presenter<VS, V, *>>(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0,
defStyleRes: Int = 0
) : View(context, attrs, defStyleAttr, defStyleRes) { ... }

但是问题在于,现在我只能从View继承。我该如何构建必须是View的子代的泛型,这样我才能实现它,并且仍然能够在我的基类内部使用override之类的onAttachedToWindow方法?

1 个答案:

答案 0 :(得分:0)

尝试这样声明您的课程:

abstract class MyCustomView<VS : ViewState, V : View<VS>, P : Presenter<VS, V, *>>() : View{ 

 constructor(context: Context) : super(context)
    constructor(context: Context, attrs: AttributeSet) : super(context, attrs)
    constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr)
    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int, defStyleRes: Int) : super(context, attrs, defStyleAttr, defStyleRes)



(...)
 }