Android ViewBinding

ViewBinding, viewlerle etkileşim sağlayabileceğimiz ve XML layout binding işlemlerini daha kolay yapabilmemizi sağlayan ve Android Studio 3.6 ile birlikte gelen bir özelliktir. Bu özellik aktif edildiğinde her bir XML layout için bir class generate edilir. Bu generate edilen class sayesinde layout içerisindeki viewlere doğrudan referanslarıyla Null-safe ve Type-safe olarak erişim sağlanabilir.

Android’de bir çok view binding işlemi vardır. Bunlardan ilk olarak akla gelen findViewById ‘dir. ViewBinding aslında findViewById yerine artık direk olarak kullanılabilir. Tabi akla gelen diğer yöntemlerde var. Örneğin; DataBinding, Kotlin Synthetics, ButterKnife gibi. Bunlara yazının ilerleyen kısımlarında ViewBinding ile karşılaştırmalı olarak değineceğim.

Şimdi ViewBinding nasıl kullanılıyor ona bir bakalım.

Üsttede bahsettiğim gibi ViewBinding, Android Studio 3.6 ile birlikte gelen bir özellik. Dolayısıyla bu özelliği kullanabilmek için Android Studio 3.6 versiyonuna sahip olmalısınız.

ViewBinding aktif edebilmek için projenizin build.gradle dosyasına alttaki kodları ekliyoruz.

ViewBinding aktif ettikten sonra artık projenizdeki XML layoutları için binding classları generate edilecek. Örneğin activity_main.xml adında bir layoutunuz varsa ActivityMainBinding şeklinde generate edilecektir.

Eğer o layoutun generate edilmesini istemiyorsanız layotunuzun root viewine tools:viewBindingIgnore="true" eklemeniz yeterli olacaktır.

Activitylerde kullanımı

activity_main.xml adında bir layout olduğunu düşünün.

Gördüğünüz gibi layout içinde 2 adet view var ve bunlara id tanımlamaları yaptık.

MainActivity.kt içerisinde ViewBinding nasıl kullanılır buna bakalım.

Tanımlaması DataBinding ile benzer. Artık setContentView() metodunda R.layout.activity_main tanımlaması yapmıyoruz. inflate() metodu ile generate edilmiş binding classını çağırıyoruz sonrasında root viewi setContentView içerisine paslıyoruz.

Viewlere alttaki gibi ulaşıp, method ve propertylerine erişim sağlayabiliyoruz.

Fragmentlarda kullanımı

Fragment içerisinde kullanımı Activity ile benzer bir yapıya sahip. Fragment içerisindeki onCreateView() metodunda bind işlemini yapacağız.

Yine inflate() metodu ile generate edilmiş classı çağırıyoruz ve onCreateView() metodu dönüş değerine root viewi return ediyoruz. Burada unutmamamız gereken bir nokta onDestroyView() içerisinde binding nesnesini null yapmamız gerekiyor ki sonrasında memory leak oluşmasın.

Viewlere erişim de yine aynı Activitydeki gibi.


Kullanımı işte bu kadar kolay. Şimdi diğer binding yöntemleri ile karşılaştırmasına bakalım.

findViewById() ye göre 2 önemli avantajı vardır. Bunlar Null safety ve Type safety.

Null Safety özelliği sayesinde NullPointerException hataları almazsınız. Dolayısıyla findViewById ye göre bu yöntem daha güvenlidir.

Type Safety ile her binding classı içerisindeki field ların cast edilme durumu ortadan kaldırılmıştır. Yani zorunlu bir casting işlemi yapmazsınız.

Şöyle bir bakıldığında ViewBinding kullanımının DataBinding ile çok benzer olduğunu göreceksiniz ancak bu ikisinin önemli farkları vardır. Örneğin ViewBinding DataBindinge göre daha hızlı bir compile time sahiptir. ViewBinding ile annotation process işlemi yapılmadığından compile time daha hızlı gerçekleşmektedir.

Bir diğer fark ise kullanım kolaylığı, ViewBinding ile XML içerisinde herhangi bir işlem yapmazsınız (ör: @{model.name} gibi bir çağrım yoktur.)

Son olarak da Kotlin Synhetics ile karşılaştırmasına bakalım. Daha önceki yazılarımda Kotlin Synhetics nasıl kullanılacağından bahsetmiştim. O yazıya da bir göz atabilirsiniz.

Kullanım kolaylığı olarak Kotlin Synhetics ViewBindinge göre daha kolay gözüküyor. Yani ekstradan birşey yapmanıza gerek yok ve direk olarak id ler üzerinden viewlere erişim sağlayabiliyorsunuz.

Eğer Kotlin Synhetics aktif olarak kullandıysanız şöyle bir problemle mutlaka karşılaşmışsınızdır. Örneğin farklı layoutlar içerisinde aynı id ye sahip viewler olsun. Bu viewlerin id lerine Kotlin Synhetics ile her yerde ulaşabilirsiniz. Yani A activity içerisindeki viewe B activity içerisinde ulaşabiliyorsunuz. Eğer dikkatli bir şekilde id çağırımı yapmazsanız uygulama açıldığında hata verecektir ve sizin id lerin aynı olduğundan haberinizi yoksa sorunun nereden kaynaklandığını arayıp duracaksınız.

Kotlin Synhetics in bir diğer eksi yönü ise sadece Kotlin içerisinde kullanılabiliyor olması yani siz Java dosyalarınızda bu çağırımı yapamayacaksınız. Ancak ViewBinding hem Kotlin hem de Java ile çalışabilme özelliğine sahiptir.

https://developer.android.com/topic/libraries/view-binding

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.