如何使用我的BasePresenter扩展所有视图

时间:2019-04-03 20:12:36

标签: android design-patterns kotlin mvp

我正在开发一个项目并在其上执行mvp,现在,我对所有活动都有一个BaseActivity,并且一个BasePresenter可以与我所处的活动视图一起工作,它可以附加,分离并知道任何地方与主持人一起工作时,我的观点是否为空。

现在,这对于我的第一个视图来说很好用

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 <>与演示者扩展我的课程时,它要求在其中放置LoginContract.View

我知道,因为这里是这样编码的

abstract class BasePresenter<T : LoginContract.View> : Presenter<T> {
...

但是我想知道是否有一种方法可以扩展这样的多个视图

abstract class BasePresenter<T : multipleViews> : Presenter<T> {

1 个答案:

答案 0 :(得分:1)

您不能扩展多个类。您应该改用一些基本接口。

如何做到这一点

  1. 基本演示者可以使用某些BaseView界面:
abstract class BasePresenter<T : BaseView> : Presenter<T>

LoginContract.View界面应扩展BaseViewRegisterContract.View也应扩展BaseView

  1. 然后,如果您需要一个可与所有视图一起使用的通用演示器,则需要创建通用界面:
interface AllViews: LoginContract.View, RegisterContract.View
  1. 现在您可以在GeneralPresenter中使用它
class GeneralPresenter : BasePresenter<AllView>