Как расширить все представления с помощью моего BasePresenter - PullRequest
1 голос
/ 03 апреля 2019

Я работаю над проектом и выполняю mvp для него, теперь у меня есть BaseActivity для всех моих действий и BasePresenter, который работает с видом деятельности, в которой я работаю, это делается для прикрепления, дитаха и узнавания где угодно мой взгляд равен нулю или нет при работе с докладчиком.

Теперь, это нормально работает для моего первого просмотра с этим

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

1 Ответ

1 голос
/ 04 апреля 2019

Вы не можете расширять несколько классов.Вместо этого вы должны использовать базовый интерфейс.

Как вы можете это сделать

  1. Базовый докладчик может использовать некоторый интерфейс 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>
...