android - insert-koin:如何将 MVP 活动视图界面注入演示者?
问题描述
我是一名 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/细节
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) }
“视图”实际上分配在哪里?!?
干杯!
解决方案
如果您检查链接的示例,您会看到在 DetailActivity.onStart()presenter.subscribe(this)
中被调用(第 31 行)。
它是 DetailContract.Presenter 实现的接口 BasePresenter 的方法(通过 RxPresenter);它在 RxPresenter 中被覆盖,并且确实将 View 分配给了 Presenter。
请注意presenter.unSubscribe()
DetailActivity.onStop()(第 36 行)中的基本调用,以免泄漏活动实例!
推荐阅读
- javascript - 重新排序单选按钮
- python - 在函数内创建列表
- javascript - 在我的 node.js 命令提示符下运行行
- r - 如何在不使用 Google API 的情况下在 R 中找到情绪分数和幅度(极性)?
- json - 在 Wonderware 的 ArchestrA / Quickscript.NET 中反序列化 JSON
- php - PHP 样式表链接
- c# - 更改 ReSharper 检查严重性一次
- xamarin - 在异常中未找到构造函数,但类具有确切的构造函数
- oauth-2.0 - 如何使用 Spring rest api 和 oauth 安全性从数据库中对用户进行身份验证
- java - 将 ArrayList 项添加到新的 ArrayList 比较值