insert-koin:如何将MVP活动视图界面注入Presenter?

时间:2018-10-09 21:33:15

标签: android koin

我是一名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) }

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

干杯!

1 个答案:

答案 0 :(得分:0)

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

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

请注意对DetailActivity.onStop()(第36行)中的presenter.unSubscribe()的必要调用,以免泄漏活动实例!