Sitemap
HilalTOKGÖZ

HilalTOKGÖZ

View Binding & Data Binding

4 min readApr 8, 2022

--

Öğrenip kodlaması birkaç saat, yazması bir hafta süren bir yazı oldu. Herkese İyi Okumalar🤗

View Binding ve Data Binding’ e geçmeden önce Kotlin Synthetic ve findbyId’ ye değinmek istiyorum.

Kotlin Synthetic

Kotlin Synthetic sayesinde Component’lere direkt erişilebiliyordu. Yani sadece View id’siyle property’ler değiştiriliyordu. Fakat birden fazla Component’ e aynı id verildiğinde çakışma önlenemiyordu ve Kotlin Synthetic sadece Kotlin dilinde kullanılıyordu. Bundan dolayı Kotlin 1.40.20-M2 güncellemesi ile Kotlin Android Extensions ile sunulan Synthetic kullanımdan kaldırıldı. Aşağıda kullanımına örnek verilmiştir.

findViewById

Java’da kullanımı olan findViewById Kotlin’de de kullanılmaktadır. Kullanımı Kotlin Synthetic kadar yalın değildir. İlk önce findViewById’ i çağırarak oluşturulan View Id’sini bir değişkene atamamız gerekmektedir.

Çok sayıda View oluşturulduğunda değişken fazlalığı kod da karmaşıklığa yol açar.

ViewBinding

View binding nesnesi oluşturup xml’ de oluşturulan View’lere nesne üzerinden erişmemizi sağlar. Kullanımı kolay ve güvenlidir. View binding kullanımına izin vermek için ilk önce Gradle Scripts altında yer alan build.gradle(Module) içerisinde bulunan Android tag’i içine

buildFeatures{
viewBinding true
}

yazıp senkronize edilir. Böylelikle viewBinding aktifleştirildi. View Binding, Data Binding’e göre daha hızlıdır.

Activity’de View Binding Kullanımı

İlk önce binding adında bir nesne oluşturuyoruz ve onCreate()’de kullanacağımızı belirtiyoruz.

Fragment’da View Binding Kullanımı

Data Binding

Data Binding View Binding’i kapsar, daha fazla işleme olanak sağlar ama yükü daha ağırdır. Bu yüzden proje de Data binding kullanırken dikkatli olmalıyız.

View Binding gibi Data Binding kullanımı için de Gradle eklentisi ekliyoruz. build.gradle(Module)➡

buildFeatures{
dataBinding true
}

Eğer Data Binding kullanmak istiyorsak oluşturulan her xml’e layout tag’i koymak zorundayız.

Activity’de Data Binding Oluşturma

Fragment’da Data Binding Oluşturma

Data Binding ile xml üzerinden Function Çağırma:

▪Xml’de oluşturulan layout içerisinde data tag’i açılabilir ve içerisinde variable ve import tanımlanabilir. Data tanımlamaya bakacak olursak;

Yukarıda görüldüğü üzere variable’ın name ve type olmak üzere 2 adet property’si vardır.

▪Xml’de oluşturulan variable’ı onCreate içinde tanımlama ➡

▪ Main Activity içerisinde yaptırmak istediğimiz işlemi içeren bir function tanımlayın.

(Aşağıda firstNumber ve secondNumber olarak 2 adet textView, bunların toplamını gösterecek resultTextView ve toplamı sonuca aktaran 1 adet buton bulunmaktadır.)

▪OnCreate içerisinde butonSetOnClickListener yapmak yerine xml’de butonun bulunduğu tag içinde onClick çağrılır.

OnCreate’ deki kod fazlalığını önlemek için kullanılır ama denge iyi sağlanmalıdır. Xml’de oluşan yığılma da kodun okunurluğunu düşürür.

Get HilalTOKGÖZ’s stories in your inbox

Join Medium for free to get updates from this writer.

▪ Yukarıdaki sumCalculation() fonksiyonu parametresizdir. Yukarıda verilen işlemi parametre vererek de yapabilirdik. Parametreli fonksiyonumuz basitçe aşağıdaki gibidir.

▪ Bu sefer Xml de bulunan buton kodumuz ufak bir değişikliğe uğrar.

▪ Variable Kullanılarak da bu işlemi gerçekleştirebiliriz. Variable xml’de değişken tanımlamayı sağlar.

Bunun için ilk önce variable’a name ile type girilir. MainActivity de bulunan fonksiyon da bu variable kullanılır.

Toplamı sumResult’a atadığımıza göre sonucun gösterileceği textView’e atamamız yeterli olacaktır.

Yukarıda yapılan işlemlerin hepsi .kt dosyasındaki yükü azaltmak için yapılmıştır. Bunun yanı sıra Data Binding sayesinde Xml dosyasında koşullu yapılar da tanımlanabilir.

Xml’de Koşullu Yapılar

Yaptırmak istediğiniz herhangi bir koşul belirleyerek işe başlayabilirsiniz. Aşağıda toplamın büyüklüğüne göre textView text renginin değişmesini isteyelim.

Herhangi bir null hatası almamak için onCreate içine sonuç textView id’sine default değer atayalım.

Daha sonra Xml’de direkt koşulu yazdırabiliriz.

sumResult Integer’a çevrildikten sonra 20'den büyükse text rengi yeşil, değilse text rengi kırmızı olacaktır.

Data tag’i içerisinde yukarıda bahsettiğim gibi yalnızca variable yoktur. İmport da bazı özellikler için kullanılır. Görünürlük(visibility) gibi.

Bu sefer de koşul 20 den büyükse textView’ı görünmez yapmak olsun. Xml dosyasında da textView’ın Visibility özelliğini kullanarak koşulu yazdırın.

Buraya kadar basitçe Data Binding ile neler yapılabileceğini notlarımdan faydalanarak paylaştım. Ufak bir aradan sonra Model tanımlayıp Xml’de bu model üzerinden işlem yaptırıp, daha sonrada Binding Adapter’dan bahsedip yazımı sonlandıracağım.

Evvetttt, şimdi bir Model oluşturalım.(new ➡kotlin class/file ➡data class) Modelin ana amacı veri tutmaktır. Aşağıda da Kitap model oluşturulmuş olup Kitap’ın tutulmasını istediğimiz özellikleri parametre olarak verilmiştir.

Oluşturduğumuz modeli kullanmak için ModelActivity oluşturulabilir.(Main Activity de karışıklık olmaması için) ModelActivity Xml’de variable oluşturup ModelActivity de BookModel kullanılarak book nesnesi oluşturuldu.

BookModel parametrelerini göstermek için, Xml de textView oluşturalım.

Böylelikle oluşturulan nesne üzerinden textView’lere atama gerçekleşti.

Not: Birden fazla Activiy’e sahipsek ve onları Navigation ile bağlamadıysak, emülatör de gözükmesini istediğimiz ekranı Manifest ➡activity tag’i altından değiştirebiliriz.

BİNDİNG ADAPTER

BindingAdapter, işlem tekrarından kurtulmaya yardımcı olur. setText(), setOnClickListener() gibi yapıları özelleştirip Xml ’den çağırmamızı sağlayan yapıdır. Aynı dosya içinde birden fazla BindingAdapter tanımlanabilir. (Örneğin okuldaki öğrencilere tebrik mesajı gönderilecek sadece isim değişmesini istiyoruz sürekli o mesajı yazmak yerine bir kez yazıp ismi değiştirmemize olanak sağlar.)

Binding adapter kullanabilmek için build.gradle(Module)➡ id ‘kotlin-kapt’ eklenir.

Binding Adapter kodlarını tutması için BindingAdapter adında dosya açalım. BookName, xml’de Binding’i çağıracağımız isimdir. Fonksiyon içindeki ilk parametre hangi View’i etkilemesini istediğimizi gösterir.

Böylelikle yapılmasını istediğimiz View üzerinden istenilen işlemleri yaptıran fonksiyon kolaylıkla tanımlanabilir. Bunun yanı sıra BindingAdapter annotation’ı ile padding ayarlanabilir, projenize resim yüklerken custom loader(özel yükleyici) çağrılabilir.

Right ve Left Padding’i Binding ile Top ve Bottom’ı ise default vermek istersek;

Padding vermek istediğiniz View’e gidip;

yazmamız yeterli olacaktır. Binding Adapter kod tekrarını önlemekle birlikte yapılan işlemlerin kontrolünü artırmaktadır.

Binding Adapter’ı da örneklendirdiğimize göre yazımı sonlandırabilirim. Kodların tamamını tek proje de inceleyebilmek için linke tıklayabilirsiniz. Herkese İyi Çalışmalar, umarım size de faydalı bir yazı olur. 🖐

--

--