如何使用我的 BasePresenter 扩展所有视图
How to extend all views with my BasePresenter
我正在做一个项目并在上面做 mvp,现在,我有一个 BaseActivity 用于我的所有 Activity 和一个 BasePresenter,它与我所在的 Activity 视图一起工作,这样做是为了在与演示者一起工作时附加、分离并了解我的视图是否为空。
现在,这对我的第一个视图来说效果很好
abstract class BasePresenter<T : LoginContract.View> : Presenter<T> {
private var mMvpView: T? = null
val isViewAttached: Boolean
get() = mMvpView != null
override fun attachView(view: T) {
mMvpView = view
}
override fun detachView() {
mMvpView = null
}
}
在我的演示者中,我这样称呼它
class LoginPresenter: BasePresenter<LoginContract.View>(), LoginContract.Presenter {
....
但是现在,我正在创建一个名为 RegisterPresenter 的新演示者,当我使用 BasePresenter<> 扩展我的 class 时,它会询问把 LoginContract.View
放在那里。
我知道,因为这里是这样编码的
abstract class BasePresenter<T : LoginContract.View> : Presenter<T> {
...
但我想知道是否有一种方法可以像这样扩展多个视图
abstract class BasePresenter<T : multipleViews> : Presenter<T> {
您不能扩展多个 类。您应该改用一些基本接口。
如何做到这一点
- Base 演示者可以使用一些
BaseView
接口:
abstract class BasePresenter<T : BaseView> : Presenter<T>
LoginContract.View
接口应扩展 BaseView
。
RegisterContract.View
也应该扩展 BaseView
.
- 然后,如果您需要一个适用于所有视图的通用演示器,您需要创建通用界面:
interface AllViews: LoginContract.View, RegisterContract.View
- 现在您可以在 GeneralPresenter 中使用它了
class GeneralPresenter : BasePresenter<AllView>
我正在做一个项目并在上面做 mvp,现在,我有一个 BaseActivity 用于我的所有 Activity 和一个 BasePresenter,它与我所在的 Activity 视图一起工作,这样做是为了在与演示者一起工作时附加、分离并了解我的视图是否为空。
现在,这对我的第一个视图来说效果很好
abstract class BasePresenter<T : LoginContract.View> : Presenter<T> {
private var mMvpView: T? = null
val isViewAttached: Boolean
get() = mMvpView != null
override fun attachView(view: T) {
mMvpView = view
}
override fun detachView() {
mMvpView = null
}
}
在我的演示者中,我这样称呼它
class LoginPresenter: BasePresenter<LoginContract.View>(), LoginContract.Presenter {
....
但是现在,我正在创建一个名为 RegisterPresenter 的新演示者,当我使用 BasePresenter<> 扩展我的 class 时,它会询问把 LoginContract.View
放在那里。
我知道,因为这里是这样编码的
abstract class BasePresenter<T : LoginContract.View> : Presenter<T> {
...
但我想知道是否有一种方法可以像这样扩展多个视图
abstract class BasePresenter<T : multipleViews> : Presenter<T> {
您不能扩展多个 类。您应该改用一些基本接口。
如何做到这一点
- Base 演示者可以使用一些
BaseView
接口:
abstract class BasePresenter<T : BaseView> : Presenter<T>
LoginContract.View
接口应扩展 BaseView
。
RegisterContract.View
也应该扩展 BaseView
.
- 然后,如果您需要一个适用于所有视图的通用演示器,您需要创建通用界面:
interface AllViews: LoginContract.View, RegisterContract.View
- 现在您可以在 GeneralPresenter 中使用它了
class GeneralPresenter : BasePresenter<AllView>