android - 如何使用我的 BasePresenter 扩展所有 View

标签 android design-patterns kotlin mvp

我正在处理一个项目并对其进行 mvp,现在,我有一个 BaseActivity 用于我的所有 Activity 和一个 BasePresenter,它与我所在的 Activity 的 View 一起工作,这样做是为了附加、分离并知道在哪里在与我的演示者一起工作时,我的观点是否为空。

现在,这对我的第一个 View 来说效果很好

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> {
...

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

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

最佳答案

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

如何做到这一点

  1. Base presenter 可以使用一些 BaseView 接口(interface):
abstract class BasePresenter<T : BaseView> : Presenter<T>

LoginContract.View 接口(interface)应该扩展BaseViewRegisterContract.View 也应该扩展 BaseView

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

关于android - 如何使用我的 BasePresenter 扩展所有 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55503551/

相关文章:

java - 是否有任何网站展示所有可用的 UI 组件和小部件以及源代码?

android - TYPE_ACCELEROMETER 和 TYPE_LINEAR_ACCELERATION 传感器有什么区别?

design-patterns - GOF 和 GRASP 设计模式有什么区别

java - Kotlin 房间 :Entities and Pojos must have a usable public constructor

java - 为什么可以将 java 可为空的返回值分配给 Kotlin Non-Nullable 变量?

java - Android从XML获取图像url到ImageView

java - 如何改变所有 Activity 的背景偏好变化?

asp.net - 什么时候应该使用工厂模式?

c# - 在 OOP 中表达类型组合

Kotlin 类型推断失败