View Binding в Android: inflate и жизненный цикл View
View Binding создаёт класс для XML-layout и ссылки на View с идентификаторами. Метод inflate создаёт дерево View во время выполнения. Генерация класса на этапе сборки не означает, что весь inflate выполнен заранее или не требует работы в runtime.
Включение в модуле
android {
buildFeatures {
viewBinding = true
}
}Это пример Kotlin DSL. После сборки для activity_main.xml будет сгенерирован ActivityMainBinding. Для обращения к textView соответствующая View должна иметь id textView.
Activity
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.textView.text = "Здравствуйте"
}Fragment
Жизненный цикл Fragment и его View различается. Создавайте binding для текущей View, возвращайте binding.root из onCreateView и освобождайте хранимую ссылку в onDestroyView. Иначе Fragment может удерживать уже уничтоженную View.
Проверка
- Сверьте имя generated class и id с XML, затем выполните сборку.
- Проверьте альтернативные layout для разных конфигураций: доступность и тип View могут отличаться.
- Поверните устройство и вернитесь на Fragment после ухода с него.
- Не удерживайте binding из долгой фоновой операции после уничтожения View.
View Binding и Data Binding — разные механизмы. Первый даёт ссылки на элементы; он сам по себе не включает выражения данных и не доказывает ускорение всего интерфейса.