insert-koin: Как внедрить интерфейс представления активности MVP в докладчик? - PullRequest
0 голосов
/ 10 октября 2018

Я разработчик 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 голосов
/ 27 ноября 2018

Если вы проверите связанный пример, вы увидите, что в DetailActivity.onStart () вызывается presenter.subscribe(this) (строка 31).

Это метод интерфейса BasePresenter, который реализует DetailContract.Presenter (через RxPresenter);он переопределяется в RxPresenter, и он действительно назначает представление для докладчика.

Обратите внимание на необходимый вызов presenter.unSubscribe() в DetailActivity.onStop () (строка 36), чтобы не пропускать экземпляр действия!

...