Android View Binding

Seyfi Ercan
SDTR
Published in
3 min readApr 27, 2020

--

Yeni bir teknoloji olan View Binding Google IO 2019'deki gösterim ile hayatımıza girmiş bulunmakta. Bundan sonra artık DataBinding gibi sıkıcı ve yorucu bir data bağlama işlemi yapmayacak olup daha kısa ve öz kod parçaları ile daha hızlı bir şekilde UI kısımlarımızdaki veri bağlamalarımızı yapacağız.

View Binding ve data binding ikiside viewlerimizi bağlama frameworküdür.

ViewBinding ile daha okunabilir, daha hızlı ve daha güvenli uygulamalar geliştirebiliyoruz. Bunlarla ne demek istediğimi hemen açıklıyorum.

Daha okunabilir ;

Daha önceden kullandığımız findByViewId ile UI kısmında bulunan bütün View’lerimizi tek tek bind etmek zorunda değiliz. DataBinding ile bir çok yere kod yazıp sonra onları UI kısmında bind etmek zorunda değiliz. ButterKnife ile dışarıdan bir kütüphane ekleyip onu tekrar view ile bind etmek zorunda değiliz.

Daha hızlı ;

Viewbinding daha hızlıdır çünkü ButterKnife veya Data Binding kütüphanelerinin kullandığı gibi ekstra annotionlar kullanmaz. Bu yüzden uygulamanın compile olma süresi daha kısadır.

Daha güvenli;

View Binding’de null safety özelliği ve type safety özelliği de vardır. Herhangi bir layouta View Binding yapacaksak eğer sadece o layouttaki View’lara erişiriz. Bu yüzdendir ki Kotlin synthetic veya findViewById gibi viewlarımıza null kontrolü yapmamız gerekmez. Aynı zamanda view olarak neye erişmek istiyorsak sadece ona özgü özellikler gelir. Yanlış bir bağlantı yapılmasına izin verilmez. Böylece xml ile bağlantıda bir sorun yaşandığı zaman cast exception almayız.

O zaman bu kadar konuştuğumuza göre biraz da kod yazalım.

ViewBinding Nasıl Bağlanır?

Öncelikle Android sürümünüz en az Android Studio 3.6 Canary 11+ olması gerekiyor. Daha sonrasındabuild.gradle(Module: app)içerisinden aktifleştirmemiz gerekiyor. Tabiki de Sync etmeyi unutmuyoruz.

android{
viewBinding{
enabled=true
}

Şunu da unutmamakta fayda var View Binding eklenen module özgüdür.Bu yüzden başka modüllerde de kullanmak istenirse her modül için ekleme yapılmalıdır.

Yukarıdaki kodu yazdıktan sonra android studio bize her bir layout.xml dosyasına erişebilmemiz için binding sınıfını oluşturacak ve herbir layoutun kendine özel bir adı olacak. Örneğin layout activity_main.xml ise ona ActivityMainBinding ile veya activity_splash.xml ise ActivitySplashBinding ile erişebileceğiz.

Main Activity’im bir tane textview ve bir tane button içeren basit bir uygulama.Artık binding diyerek itemlerime erişim sağlayabildiğime göre, itemlerimin değerini alabilir, özelliklerine erişebilir, veri atama işlemlerini yapabilirim. Ayrıca layoutumda binding yapmak istediğim layoutta kimliği olmayan herhangi bir view ögesine erişim sağlamam mümkün olmadığı için null hatası almamış oluyorum.

private lateinit var binding: ActivityMainBinding

Kodu yazarak aslında viewlara erişim sağlayabilmek için statik bir view ögesi oluşturmuş oluyoruz. Böyle ActivityMainBinding.inflate(LayoutInflater) inflate işlemi yaparak oluşturulan binding sınıfının statik bir örneğini almış oluyoruz. Son olarak da binding.root diyerekte top level view ögesine erişim sağlayabiliyoruz

class MainActivity : AppCompatActivity() {

private lateinit var binding: ActivityMainBinding

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
//Todo something
}

İyi hoş güzel de Fragment ile nasıl kullanacağız?

Aslında activityde kullandığımız mantığın aynısı fragmentlar içinde geçerli. Yalnız unutmamız gereken bir şey var!

ViewBinding acivitylerde olduğu gibi fragmentlarda da otomatik olarak bind dosyasını oluşturmakta. Burada önemli olan şey activitylerde daha önceden bahsettiğimiz gibi static olarak bind işlemi yapılmaktaydı. Aynı mantık fragmentlarda da olduğu için bind değişkenini fragmentla işimiz bittiği zaman yani onDestroy methodu içerisinde oluşturduğumuz bind değişkenini null değerine eşitlememiz gerekiyor. Aksi takdirde ilerleyen süreçte Ram ile sıkıntılar yaşamaya başlayabilir ve uygulamamız ANR hatasına kadar gidebilir. Böylece bind değişkenimizi null değerine eşitlediğimiz için geri kalan işi garbage collectora bırakmış oluyoruz.

Fragment ve Activity constructoru içerisinde layoutumuzu direk ekleyebiliyoruz. Böylece daha az kod ile layoutlarımızı yaşam döngümüze eklemiş oluyoruz

Aslında View Binding kullanmak bu kadar basit. Artık ui kısımdaki ögelerinize
erişmek için tek yapmanız gereken binding. demek ve erişim sağlamak.

Kaynakça :

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

Facebook | Instagram | Mail | Linkedln | GitHub

--

--