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()