Иногда, по каким-то причинам, мы не можем использовать библиотеку kotlin synthetics library для поиска view в layout. Например, если layout был программно изменён на рантайме, некоторые view не могут быть привязаны с помощью synthetics, так как view binding запускается на старте создания view. Конечно, можно воспользоваться старым добрым findViewById(), но более мощным подходом будет использование kotlin extension с применением ленивой инициализации:

fun <T : View> Activity.bindView(@IdRes idRes: Int): Lazy<T> = lazy(LazyThreadSafetyMode.NONE) { findViewById<T>(idRes) }

Теперь мы можем спокойно искать view с использованием этого делегата:

val screenText: TextView by bindView(R.id.screenText)

или

val screenText by bindView<TextView>(R.id.screenText)

Это более удобно да и выглядит намного приятнее 🙂

Добавить комментарий

Закрыть меню