Обращение к элементу фрагмента без поиска по id

Есть вот такой рабочий пример кода

//  найти кнопку по id (тяжелая операция!!!!)
val rollButton: Button = findViewById(R.id.roll_button)
rollButton.text = "Let's Roll" // change buttons text

Взято с курса гугла. В качестве альтернативы тяжелой операции поиска по id предлагается использовать прослойку data binding

Вопрос в том, что в другом курсе встретил вот такой рабочий код:

    override fun onViewCreated(view: View, savedInstanceState: Bundle?){
        super.onViewCreated(view, savedInstanceState)

        button_login.setOnClickListener{ view : View ->
            view.findNavController().navigate(R.id.action_login_to_account)
        }
    }

суть в том, что обработчик вешается на кнопку button_login (это ее id), хотя нигде явно нет поиска по id. Разве что, после вставки этого кода в импортах добавилось

import kotlinx.android.synthetic.main.fragment_login.*

Как тут произошел поиск кнопки ? Был какой то неявный поиск по id ?? Можно ли так писать в боевых проектах или это демонстрационный неоптимизированный пример ?

Спасибо


Ответы (1 шт):

Автор решения: Sergei Buvaka

В Kotlin есть чудесная штука: Kotlin Android Extensions. Одной из прелестей этих функций есть "Синтетики (Synthetic)". Суть этой штуки в том, что в любой View где вы можете вызвать метод findViewById() вы можете напрямую обращаться ко View по их id.

Под капотом вызывается все тот же findViewById() и никакой магии в этом нет, но все это делается за вас, уменьшая пачку однотипного кода".

Вот хорошая статья на эту тему.

→ Ссылка