如何使用我的 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> {

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

如何做到这一点

  1. Base 演示者可以使用一些 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>