我正在处理一个项目并对其进行 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)。
如何做到这一点
- Base presenter 可以使用一些
BaseView
接口(interface):
abstract class BasePresenter<T : BaseView> : Presenter<T>
LoginContract.View
接口(interface)应该扩展BaseView
。
RegisterContract.View
也应该扩展 BaseView
。
- 然后,如果您需要一个适用于所有 View 的通用演示器,您需要创建通用界面:
interface AllViews: LoginContract.View, RegisterContract.View
- 现在您可以在 GeneralPresenter 中使用它了
class GeneralPresenter : BasePresenter<AllView>
关于android - 如何使用我的 BasePresenter 扩展所有 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55503551/