Я бы порекомендовал следующий подход
Сначала создайте базовый интерфейс презентатора, как показано ниже
interface BasePresenter<View : BaseView> : LifecycleObserver {
var view: View?
var viewLifecycle: Lifecycle?
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
fun attachView(view: View, viewLifecycle: Lifecycle?) {
this.view = view
this.viewLifecycle = viewLifecycle
viewLifecycle?.addObserver(this)
}
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
override fun onViewDestroyed() {
view = null
viewLifecycle = null
}
}
Затем, при желании, вы можете создать интерфейс базового вида с помощью базовых c операций * 1006. *
interface BaseView {
fun showProgressDialog()
fun hideProgressDialog()
}
И ваш класс презентатора должен выглядеть следующим образом:
class MainPresenter() : BasePresenter<MainView> {
var counter: Int = 0
override fun incrementCount() {
counter++
view?.updateCount(counter)
}
override fun decrementCount() {
counter--
view?.updateCount(counter)
}
}
И тогда, где бы вы ни инициализировали свой экземпляр презентатора, не забудьте присоединить реализацию представления, как показано ниже
presenter.attachView(this, lifecycle)
Объяснение этой реализации
Расширение Presenter, расширяющее ViewModel, может показаться странным, но давайте не будем путать его с ViewModel из MVVM - ViewModel в A C «предназначен для хранения и управления пользовательским интерфейсом» данные в сознательном жизненном цикле », и это именно то, чего мы хотим достичь
Расширяя ViewModel, экземпляр Presenter переживет изменения конфигурации
Передавая и наблюдая viewLifecycle, каждый Presenter автоматически устанавливает свой вид ссылка на ноль до уничтожения представления
Статья e xplaining в деталях