Kotlin аргумент делегированного фрагмента - PullRequest
0 голосов
/ 07 мая 2020

Интересно, сталкивался ли кто с этой проблемой. Пробую Kotlin делегатов. Но во-первых, у меня есть интерфейс под названием DataHolder. Я использую его для общения с фрагментами. Я использую это, потому что у меня есть «универсальные» фрагменты, такие как AdditionalFieldsFragments, где я просто хочу показать список с помощью Enumeration и разместить значение в LiveData, а затем просто наблюдать за не «универсальным» фрагментом. Я не использую SharedViewModel, потому что не могу.

Representation

Итак, моя проблема в том, что я создал делегата, который вызывается расширением

inline fun <reified T> Fragment.holder(requestId: Int? = arguments?.get("requestId") as? Int): ReadOnlyProperty<Fragment, T> where T : DataHolder {
    return DataHolderProperty(requested) // requestId cannot be null, if it is, it can be handled inside
}

И вот моя проблема. Эта функция holder() вызывается при инициализации фрагмента, но, к сожалению, аргументов нет.

Я использую вот так

private val dataHolder by holder<DiscountDataHolder>()

Может быть, стоит упомянуть, что я использую компонент навигации.

Мои вопросы являются:

  1. Могу ли я как-то сказать делегату, что он должен быть инициализирован после onCreate()?
  2. Могу ли я каким-то образом переназначить делегату setValue? (этот метод пока не работает)
  3. Надо ли решать его с помощью by lazy? (Если это так, то я должен забыть о параметре делегирования, я думаю)
  4. Есть ли какой-либо вариант, например, я могу получить некоторую информацию о фрагменте вызывающего абонента в init()? * 1033 фрагмента назначения. *
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...