Android Architecture Components DataBinding -1 Nedir? Ne İşe Yarar? Projemizde Nasıl Kullanabiliriz?
Bu yazıda Jetpack’in Architecture Componentlardan bir parçası olan Data Binding kütüphanesinden bahsedeceğim. Projeye nasıl dahil edilir, nasıl kolaylıklar sağlar gibi sorulara cevap arayacağız.
Data Binding, isminden de anlayacağımız gibi veri ile arayüzü birbirine bağlar. Arayüz ve veri arasına girerek bir köprü görevi görür. Peki neden var? Niye kullanalım ki? Bu sorulara cevap ararken aşağıdaki görselleri inceleyelim.
Bu kod bloklarında bir recyclerview bind işlemini görüyoruz. Olayın özeti aslında bu iki görsel arasında. Burada veri modelimizin sadece iki özelliğine eriştik fakat bir veri modeli düşünün ki en az 5 özelliğini ekranda kullanacağız. İşte o zaman Data Binding önemi daha da artıyor.
Yani Data Binding ile her zaman hedefimiz olan daha temiz daha yönetilebilir kodlara daha da yaklaşıyoruz. Tabi ki aradaki farklı kodlar uçup yok olmuyor :) Data Binding ile beraber kodların bir kısmı layout dosyalarına taşınıyor. Gelin DataBinding’e biraz daha yaklaşalım.
DataBinding modül seviyesinde çalışır. Bu yüzden projemizin hangi modülünde DataBinding’i kullanmak istiyorsak o modülün gradle dosyasından aktif etmemiz gerekiyor. Ayrıca kotlin-kapt plugini de eklememiz gerekiyor.
Bu arada modelimizi tasvir edecek bir data class oluşturalım.
Artık modülümüzde DataBinding’i kullanabiliriz. Fakat layout dosyamızın bir veri taşıyabilmesi için bir işlem daha yapmalıyız. Layout dosyamızı otomatik olarak dönüştürebiliriz. Ya da elle <layout> tagları arasına alabiliriz.
Sonuç olarak artık layout dosyamız, içinde bir veri tanımlayabileceğimiz durumda. Data classımızı layout dosyamıza data model olarak ekleyelim:
Data Binding ile bağlanan bir veriyi kullanmak için @{veri} syntaxı kullanılır. Layout dosyamızı modelimize göre değiştirelim.
Artık Activity/Fragment tarafına geçebiliriz. Bir databinding layotuna erişmek için, layoutu DataBinding ile inflate etmemiz gerekir.
Daha önceleri findviewByID, Butterknife, Syntetic Import gibi yöntemlerle eriştiğimiz layout içindeki bileşenlere binding nesnemiz üzerinden erişebiliriz.
Ekranda göstermek için öncelikle veriye ihtiyacımız var. Bu veri genelde remote serverdan ya da local dbden gelir fakat biz şimdilik mock veri ile çalışalım.
Az önce tanımladığımız binding nesnesi ile arayüzdeki bileşenlere erişebiliriz, tanımladığımız user modeline veri gönderebiliriz.
Ama bir terslik mi var? Neden Textviewlere erişmeden atama yaptık da Imageviewlerde aynısını yapamadık?
İşte bu soruya cevap olarak hazırlanan yapıya BindingAdapters deniyor. BindingAdapters ile beraber bir view bileşenine custom attribute tanımlayabiliriz. Örnek olarak Imageview’e linki indirip dahil edecek bir fonksiyon yazalım.
Ve bu fonksiyonu kullanmak ile diğer attributelerin kullanımı arasında hiçbir fark yok.
Giriş Seviyesinde DataBinding kullanımını özetlemek için aşağıdaki görsele bakalım. (Eğer fotoğrafı göremiyorsanız manifest dosyasında internet iznini kontrol edin
<uses-permission android:name=”android.permission.INTERNET” />
DataBinding i projeye dahil etmek ve layoutlarda kullanmak ile ilgili yazımızın sonundayız. Eğer daha fazla detay istiyorum ben diyorsanız sizi şuraya alalım.
Proje: https://github.com/mustafayigitt/AndroidLearningProjects/tree/master/DatabindingExample
Peki gerçekten remote server ile, farklı data stateleri ile, daha komplike bir databinding örneği yok mu diyenleri de şurdaki Github repoma yönlendireyim. Kotlin Flow, Retrofit, MVVM — LiveData — DataBinding gibi Architectural Componentlerin kullanıldığı basit bir projedir.
Bir sonraki yazıda görüşmek üzere…