SmartQuery /ВОПРОС → ПРИМЕР → ПОНЯТНЫЙ ОТВЕТ
Веб-разработка

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 — разные механизмы. Первый даёт ссылки на элементы; он сам по себе не включает выражения данных и не доказывает ускорение всего интерфейса.

Документация