ViewBinding
https://d.android.com/topic/libraries/view-binding |
ViewBinding
Это механизм в Android, который упрощает работу с элементами интерфейса. Предоставляет безопасный и удобный способ взаимодействия с представлениями (views) в коде. Он автоматически генерирует классы привязки для каждого XML-файла макета и избавляет от необходимости использовать методы вроде findViewById
.
• Автоматическое создание классов привязки: для каждого XML-макета с именем, например, activity_main.xml, ViewBinding создает класс с именем ActivityMainBinding. Этот класс содержит ссылки на все элементы в макете, что позволяет легко обращаться к ним в коде.
• Безопасность при компиляции: привязка осуществляется во время компиляции, поэтому ошибки, связанные с неверными айдишниками представлений, выявляются при сборке проекта. Это позволяет избежать ошибок в рантайме.
// Включение ViewBinding внутри модуля:
android {
buildFeatures {
viewBinding = true
}
}
Activity
class MainActivity: AppCompatActivity() {
private lateinit var binding: ActivityViewBinding
override fun onCreate(savedInstanceState: Bundle?) {
binding = ActivityViewBinding.inflate(layoutInflater)
setContentView(binding.root)
}
}
Fragment
class ExampleFragment: Fragment() {
private var _binding: FragmentExampleBinding? = null
private val binding: FragmentExampleBinding get() = _binding!!
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_binding = FragmentExampleBinding.inflate(inflater, container, false)
return binding.root
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}
View
class CustomView(context: Context, attrs: AttributeSet): LinearLayout(context, attrs) {
private val binding = CustomViewBinding.inflate(LayoutInflater.from(context), this, true)
}
ViewHolder
class ExampleViewHolder(
private val binding: ItemExampleBinding
): ViewHolder(binding.root)
class ExampleAdapter: RecyclerView.Adapter<ExampleViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ExampleViewHolder {
val binding = ItemExampleBinding.inflate(LayoutInflater.from(parent.context), parent, false)
return ExampleViewHolder(binding)
}
override fun onBindViewHolder(holder: ExampleViewHolder, position: Int) {}
}
ViewBindingPropertyDelegate
Позволяет использовать ViewBinding через делегаты, что делает код более чистым и удобным.
• Вместо ручной инициализации ViewBinding и его очистки, библиотека позволяет автоматически управлять жизненным циклом привязки через делегаты. Это помогает избежать ошибок и улучшить читаемость кода.
• Библиотека обеспечивает безопасный доступ к элементам интерфейса, гарантируя, что ссылки на представления не будут null, если они присутствуют в макете.
private val viewBinding: ProfileFragmentBinding by viewBinding()