Semenjak android studio 4.1 diluncurkan penggunaan kotlin syntetic sudah tidak diutamakan dan sudah tergolong deprecated walaupun masih bisa digunakan.
Sebagai penggantinya google sebagai official menyarankan untuk menggunakan view binding untuk melakukan pengikatan view ke dalam kode logic program. View binding sangat powerfull untuk digunakan karena aman dari kesalahan serta support untuk java dan kotlin.
Berikut cara menerapkan view binding.
Pertama buka build gradle dan akftikan viewBinding
di dalam blok android.
android {
...
...
buildFeatures {
viewBinding true
}
}
Kemudian buka MainActivity
dan inisialisasi variable binding terlebih dahulu diluar fungsi onCreate().
private lateinit var binding: ActivityMainBinding
Kemudian hapus fungsi setContentView yang mengarah ke activity_main.xml dan ganti dengan view binding yang sudah di inflate sehingga seperti berikut.
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
}
Untuk mulai menerapkan view binding tinggal ditulis seperti berikut.
binding.btnGenerate.setOnClickListener {
val name = binding.edtName.text.toString()
binding.txtName.text = name
}
Contoh diatas merupakan view binding untuk memanggil Button, editText, dan TextView dari activity_main.xml dan melakukan beberapa proses di dalamnya.
Lalu bagaimana cara menerapkan view binding pada fragment ? caranya sedikit berbeda dengan activity. Berikut cara menerapkan view binding pada fragment.
Buka file fragmentnya dalam hal ini AmazingFragment.kt
kemudian sesuaikan kodenya menjadi seperti dibawah ini.
class AmazingFragment : Fragment() {
private lateinit var binding: FragmentAmazingBinding // deklerasi binding
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = FragmentAmazingBinding.inflate(inflater, container, false) // inflate binding
return binding.root // return binding
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.btnGenerate.setOnClickListener {
val name = binding.edtName.text.toString() // penerapan
binding.txtName.text = name
}
}
}
Kemudian jangan lupa untuk melakukan onDestroy supaya tidak menyebabkan memory leak.
override fun onDestroyView() {
binding = null
}
Itulah cara penerapan view binding pada activity dan fragment, semoga bermanfaat.