android - 如何使用我的 BasePresenter 扩展所有视图
问题描述
我正在处理一个项目并对其进行 mvp,现在,我有一个用于所有活动的 BaseActivity 和一个与我所在的活动视图一起工作的 BasePresenter,这样做是为了附加、分离和知道我的视图在哪里与我的演示者一起工作时是否为 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> {
解决方案
您不能扩展多个类。您应该改用一些基本接口。
你怎么能做到这一点
- Base Presenter 可以使用一些
BaseView
接口:
abstract class BasePresenter<T : BaseView> : Presenter<T>
LoginContract.View
接口应该扩展BaseView
。
RegisterContract.View
也应该延长BaseView
。
- 然后,如果您需要一个适用于所有视图的通用演示者,您需要创建通用界面:
interface AllViews: LoginContract.View, RegisterContract.View
- 现在您可以在 GeneralPresenter 中使用它
class GeneralPresenter : BasePresenter<AllView>
推荐阅读
- angular - Angular 8 从表单值创建一个 XML 文件
- android - 在 RecyclerView 的项目上使用 MotionLayout OnSwipe
- ruby - sed 命令的行为不同
- json - 如何在 AngularJS 中显示来自 JSON 的值
- java - 使用数组列表将多边形添加到场景中
- angular - 如何在角度 7 中动态显示隐藏?
- java - 未找到依赖项
- android - 在使用来自 com.google.android.gms:play-services-maps:17.0.0 的 SupportMapFragment 时检测双击
- javascript - 将一个数组按另一个数组排序并附加未知的缺失项
- css - h1 标签如何获取属性以使其响应 - ReactJS