【问题标题】:insert-koin: How to inject MVP activity view interface into presenter?insert-koin:如何将 MVP 活动视图界面注入演示者?
【发布时间】:2018-11-27 23:40:47
【问题描述】:

我是一名 Android 开发人员,我在设计应用时使用 MVP。我最近收到了 Insert-Koin 的消息,我越用越喜欢它。但是,在将我的应用程序转换为使用 Koin 时,我需要将我的活动视图界面传递给演示者,这是否意味着我也需要注入我的活动?我看过 MVP 示例,但不是很清楚,因为它们不直接传递活动视图界面,​​而是通过 RxPresenter 对象完成(不知道)。

希望能说明如何向我的演示者注入活动视图界面。

这是示例 MVP 代码中的演示者: https://github.com/InsertKoinIO/koin/tree/master/koin-projects/examples/android-mvp/src/main/kotlin/fr/ekito/myweatherapp/view/detail

class DetailPresenter(
    private val id: String,
    private val weatherRepository: WeatherRepository,
    private val schedulerProvider: SchedulerProvider
) : RxPresenter<DetailContract.View>(), DetailContract.Presenter {

    override var view: DetailContract.View? = null

    override fun getDetail() {
        launch {
            weatherRepository.getWeatherDetail(id).with(schedulerProvider).subscribe(
                { detail ->
                    view?.showDetail(detail)
                }, { error -> view?.showError(error) })
        }
    }
}

然后是活动:

class DetailActivity : AppCompatActivity(), DetailContract.View {

    // Detail id passed by argument
    private val detailId by argument<String>(ARG_WEATHER_ITEM_ID)

    override val presenter: DetailContract.Presenter by inject { parametersOf(detailId) }

“视图”实际分配在哪里?!?

干杯!

【问题讨论】:

    标签: android koin


    【解决方案1】:

    如果您检查链接的示例,您会看到在 DetailActivity.onStart() 中调用了 presenter.subscribe(this)(第 31 行)。

    是接口BasePresenter的方法,DetailContract.Presenter实现(通过RxPresenter);它在 RxPresenter 中被覆盖,并且确实将 View 分配给了 Presenter。

    请注意在 DetailActivity.onStop()(第 36 行)中对 presenter.unSubscribe() 的基本调用,以免泄露活动实例!

    【讨论】:

      猜你喜欢
      • 2016-11-15
      • 1970-01-01
      • 1970-01-01
      • 2021-12-31
      • 1970-01-01
      • 2018-12-03
      • 1970-01-01
      • 1970-01-01
      • 2020-05-01
      相关资源
      最近更新 更多