Интересно, сталкивался ли кто с этой проблемой. Пробую Kotlin делегатов. Но во-первых, у меня есть интерфейс под названием DataHolder. Я использую его для общения с фрагментами. Я использую это, потому что у меня есть «универсальные» фрагменты, такие как AdditionalFieldsFragments, где я просто хочу показать список с помощью Enumeration и разместить значение в LiveData, а затем просто наблюдать за не «универсальным» фрагментом. Я не использую SharedViewModel, потому что не могу.
Итак, моя проблема в том, что я создал делегата, который вызывается расширением
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>()
Может быть, стоит упомянуть, что я использую компонент навигации.
Мои вопросы являются:
- Могу ли я как-то сказать делегату, что он должен быть инициализирован после
onCreate()
? - Могу ли я каким-то образом переназначить делегату setValue? (этот метод пока не работает)
- Надо ли решать его с помощью
by lazy
? (Если это так, то я должен забыть о параметре делегирования, я думаю) - Есть ли какой-либо вариант, например, я могу получить некоторую информацию о фрагменте вызывающего абонента в
init()
? * 1033 фрагмента назначения. *