View Binding memudahkan penulisan kode yang berinteraksi dengan tampilan. Berikut cara menyiapkannya di proyek Android Gradle Anda.
Sebagian besar pengembang Android mungkin akrab dengan yang klasik findViewById()
metode. Berikan ID salah satu Tampilan dalam tata letak XML Anda dan itu akan mengembalikan referensi ke versi Tampilan tersebut yang diperluas. Itu semua dengan asumsi Anda memberikan ID yang benar, dan Tampilan tersebut benar-benar ada. findViewById()
tidak memiliki pemeriksaan bawaan untuk mencegah Anda mencoba mengambil Tampilan yang tidak dapat Anda ambil. Masuk ke Tampilan Binding.
Daripada menggunakan findViewById()
pada setiap Tampilan yang Anda inginkan, View Binding secara otomatis menghasilkan kelas pengikatan untuk setiap XML tata letak. Setiap Tampilan dengan ID secara otomatis ditambahkan ke kelas, sehingga Anda dapat mereferensikannya secara langsung.
Menambahkan View Binding ke proyek Android Gradle sangatlah sederhana.
Pengaturan Gradle
View Binding diaktifkan pada tingkat modul di Gradle. Jika Anda memiliki beberapa modul, Anda harus mengaktifkannya satu per satu untuk masing-masing modul.
Dalam android
blok di tingkat modul Anda build.gradle
, tambahkan opsi untuk mengaktifkan View Binding.
android {
...
buildFeatures {
viewBinding true
}
}
Mungkin ada peringatan tentang akses ilegal, tapi itu adalah bug lint dan dapat diabaikan dengan aman.
Sinkronkan proyek dan View Binding akan diaktifkan. Semudah itu.
Menggunakan Pengikatan Tampilan
Ada beberapa cara untuk menggunakan View Binding, tapi sebelum itu terjadi, mari kita bahas tentang bagaimana kelas binding dibuat.
Sintaks Nama Kelas
Katakanlah Anda memiliki tata letak bernama XML some_layout.xml
. Kelas pengikatannya yang sesuai akan diberi nama SomeLayoutBinding
. Pola itu berlaku untuk semua file.
Setiap kata (dipisahkan dengan garis bawah pada nama file) akan menggunakan huruf kapital, dan garis bawah akan dihilangkan. "Binding" kemudian ditambahkan di bagian akhir.
Membuat Instansiasi dengan Tampilan yang Ada
Jika Anda sudah memperluas file tata letak dan memiliki referensi ke akar tata letak, Anda bisa memberi tahu kelas View binding untuk menggunakan tata letak yang ada.
Kotlin:
val binding = SomeLayoutBinding.bind(someLayoutRoot /* should be a View instance */)
Jawa:
SomeLayoutBinding binding = SomeLayoutBinding.bind(someLayoutRoot /* should be a View instance */);
Misalnya, jika Anda ingin menggunakan kelas pengikatan dalam Fragmen, tampilannya akan seperti ini.
Kotlin:
classSomeFragment : Fragment(R.layout.some_layout) {
//Lazy initialization means bind() won't be called until "binding" is referenced.
private val binding by lazy { SomeLayoutBinding.bind(view) }
override fun onViewCreated(view: View, savedInstanceState: Bundle?){
super.onViewCreated(view, savedInstanceState)
//Once this method is called, you can start using the binding.
}
}
Jawa:
publicclassSomeFragmentextendsFragment{
private SomeLayoutBinding binding = null;publicSomeFragment(){
super(R.layout.some_layout);
}
@Override
publicvoidonViewCreated(View view, Bundle savedInstanceState){
super.onViewCreated(view, savedInstanceState);
//Initialize the binding.
binding = SomeLayoutBinding.bind(view);
}
}
Membuat Instansi dengan Tampilan Baru
Kelas pengikatan juga dapat membantu mengembangkan tata letak untuk Anda.
Kotlin:
val binding = SomeLayoutBinding.inflate(layoutInflater /* should be a LayoutInflater instance */)
Jawa:
SomeLayoutBinding binding = SomeLayoutBinding.inflate(layoutInflater /* should be a LayoutInflater instance */);
Metode ini berguna dalam Fragmen dan Aktivitas.
Sebuah contoh Fragmen akan terlihat seperti berikut.
Kotlin:
classSomeFragment : Fragment() {
private val binding by lazy { SomeLayoutBinding.inflate(LayoutInflater.from(requireContext())) }
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?){
//The "root" of the binding class is the root of its layout.
return binding.root
}
}
Jawa:
publicclassSomeFragmentextendsFragment{
private SomeLayoutBinding binding = null;
@Override
publicvoidonCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
//Initialize the binding.
binding = SomeLayoutBinding.inflate(inflater);
//The "getRoot()" method of the binding class returns the root of the layout.
return binding.getRoot();
}
}
Sebuah contoh Aktivitas akan terlihat seperti berikut.
Kotlin:
classSomeActivity : AppCompatActivity() {
private val binding by lazy { SomeLayoutBinding.inflate(layoutInflater) }override fun onCreate(savedInstanceState: Bundle?){
super.onCreate(savedInstanceState)
//This is equivalent to calling "setContentView(R.layout.some_layout)" but allows use of the binding class.
setContentView(binding.root)
}
}
Jawa:
publicclassSomeActivityextendsAppCompatActivity{
private SomeLayoutBinding binding = null;@Override
protectedvoidonCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//Instantiate the binding.
binding = SomeLayoutBinding.inflate(getLayoutInflater());
//This is equivalent to calling "setContentView(R.layout.some_layout)" but allows use of the binding class.
setContentView(binding.getRoot());
}
}
Tampilan Referensi
Sekarang kelas View binding telah disiapkan dan siap digunakan, sekarang saatnya untuk benar-benar menggunakannya.
Katakanlah isi dari some_layout.xml
adalah sesuatu seperti berikut:
android:
...>
android:
...
/>
android:
...
/>
android:
...>
android:
...
/>
LinearLayout>
LinearLayout>
Ada banyak ID di sana untuk referensi dalam kode. Namun selama kelas pengikatan Anda sudah dipakai, referensi akan mudah.
Di Kotlin, Tampilan direferensikan oleh variabel yang cocok dengan ID-nya, dengan beberapa perubahan. Garis bawah dihilangkan dan string yang dihasilkan dibungkus dengan unta. Misalnya untuk referensi some_frame_layout
dari kode, Anda akan menggunakan binding.someFrameLayout
. Itu someFrameLayout
variabel akan menjadi turunan dari FrameLayout.
val someFrameLayout: FrameLayout = binding.someFrameLayout
Di Java, Tampilan direferensikan oleh metode pengambil yang cocok dengan ID-nya, dengan format yang mirip dengan Kotlin. Misalnya untuk referensi some_frame_layout
, Anda akan menggunakan binding.getSomeFrameLayout()
. Metode ini akan mengembalikan instance FrameLayout.
FrameLayout someFrameLayout = binding.getSomeFrameLayout();
Referensi Tampilan juga diratakan dalam penjilidan. Referensi inner_imageview
sama dengan referensi some_frame_layout
.
Kesimpulan
Seperti yang saya yakin Anda bisa lihat, View Binding di Android mudah diterapkan dan digunakan. Dalam banyak kasus, ini lebih mudah digunakan daripada findViewById()
.
Untuk detail lebih lanjut tentang penerapan View Binding, beserta beberapa contohnya, lihat dokumentasi resmi Google.