如何使用BasePresenter扩展所有视图

问题描述 投票:1回答:1

我正在研究一个项目并在其上做mvp,现在,我有一个BaseActivity用于我的所有活动和一个BasePresenter,它与我所在的Activity的视图一起工作,这是为了附加,ditach并知道我的视图在哪里使用我的演示者时是否为null。

现在,这对我的第一个视图工作正常

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> {
android design-patterns kotlin mvp
1个回答
1
投票

您无法扩展多个类。您应该使用一些基本接口。

How you can do this

  1. Base presenter可以使用一些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>
© www.soinside.com 2019 - 2024. All rights reserved.