Android Data Binding Kütüphanesi

Java Kotlin Eğitimi

Merhaba Arkadaşlar
Mobilhanem.com sitemiz üzerinden anlattığımız / yayınladığımız derslerimize bu dersimizde Android Data Binding kütüphanesini kullanarak Application logic ile layout’ları nasıl daha az kod ile birleştirip kullanabiliriz anlatmaya çalışacağız. Data Binding bize layotlarımız (user interface) ile application logic ve modelimizi birbirine senkron şekilde kullanmamıza olanak sağlar. Hem de bunu en az kod ile yapar.

Bu dersimiz uzun derslerimizden biri olacak. Dersimiz için çok basit bir arayüz hazırlayacağım. Bu arayüzde mobilhanem sitemizdeki bir dersin detayları olacak ve bir buton yardımı ile bu dersi değiştirip başka bir dersin detaylarını göstereceğiz.

Java Kotlin Eğitimi


Change Tutorial butonuna bastığımız an farklı bir dersin bilgileri ekrana gelecek.

Android Data Binding dersimize başlamadan önce bu işlemleri data binding ve ya herhangi 3.parti bir kütüphane olmadan nasıl yapıyorduk buna bakalım.

Klasik Yöntem

main_activity.xml

Yukarıda basit bir arayüz oluşturduk. Ders için hazırladığımdan fazla özen göstermedim. Sizler kendiniz hazırlarken kod tekrarından ve string ve dimension’ları direk kullanmadan kaçınmalısınız. Bu dersimizin konusunu olmadığı için devam ediyorum.

TutorialData.java

Yukarıda ders bilgilerini tutacağımız model class’ı tanımladık.

MainActivity.java

Yukarıda ise her bir xml elemanımızı tek tek tanımladık. Sonrasında ise her birinin değerini tek tek setData() metotu içinde set ettik. Sonra buton’a tıklanınca data’mızın değerlerini değiştirdik ve tekrardan set ettik. Bizim bu dersimizde çok fazla elemanımız olmadığı için fazla bir yük gibi gözükmesede 10’larca itemin olduğu bir view’i tek tek kodda findById() metotu ile tanımlamak, onlara değer atamak ve her bir değişiklikte tekrar değer atamak cidden zahmetli bir iş ve test driven kod yazanlar için işi daha zor hale getiren bir durum.

Peki bunu nasıl aşacağız. Daha az kod yazarak model , view ve Application Logic ‘i yani Activity’i nasıl birleştireceğiz. Data Binding kullanmadan önce klasik yöntemden daha az kod yazdıran 3.parti bir kütüphane olduğundan söz etmem gerekir. Bu kütüphanenin adı ButterKnife kütüphanesi. ButterKnife kütüphanesi ile daha az kod yazarak bu işi yapabiliriz.İncelemek için tıklayınız.

Eeee madem bu kütüphane bu işi yapıyor bu dersi neden yaptık diyorsanız, çünkü Data Binding ile daha da az kod yazarak bu işi yapabiliyoruz. O zaman başlayalım asıl dersimizin konusuna.

Android Data Binding Kütüphanesi

Öncelikle build.gradle dosyamız içinde android attribute altında data binding kütüphanesi kullanmaya izin vermeliyiz.

Bu izni verdikten sonra artık kullanmaya başlayabiliriz.

main_activity.xml

Yukarıda gördüğünüz gibi direk bir Linear , Relative ve ya Constraint Layout ile değil <layout> tagı ile başladık ve kullanacağımız model’i xml’imize data tagı altında bildirmiş olduk.

Biz burada yukarıda klasik yöntemde kullandığımız  TutorialData’nın aynısı değişiklik yapmadan kullanıyoruz.

Sonrasında textview.setText işlemlerini activity’de yapmak yerine burada textView’in TutorialData’nın hangi değişkenini kullanacağını android:text="@{tutorial.authorName}" şeklinde bu textView’in TutorialData’nın authorName değişkenini kullanacağını söylüyoruz. Bunun gibi tüm textView’leri hangi değişkenleri kullanacağını yukarıdaki xml içinde belirtiyoruz.

Gelelim activity içinde ne yaptığımıza:

MainActivity.java

Klasik yöntemdeki gibi satırlarca tanımlamalarla uğraşmadık. Aynı zamanda setText metotlarını activity içinde tanımlamak zorunda kalmadık. 10’larca satır koddan kurtulduk diyebiliriz. Çok daha büyük projelerde yüzlerce satır koddan kurtulmamızı sağlayacaktır.

Yukarıdaki kodu çalıştırdığımız zaman dataların otomatik olarak textviewlere set edildiğini göreceksiniz.

Ama yukarıdaki kodda TutorialData da herhangi bir güncelleme yapmadık. Yani yukarıdaki kodda sadece bir dersi gösterebiliyoruz. Change Tutorial butonumuzun bir işlevselliği yok. Bunun için önce data binding kullanarak nasıl buton’a clicklistener tanımlayabiliriz ona bakalım.

Databinding Event Handling

DataBinding kullanırken Event Handling olayını iki şekilde yapabiliriz.

1- Method References kullanarak

2- Listener Bindings kullanarak

Ben bu dersimde basit yöntem olan 1.sini anlatacağım. 2. sini de öğrenmek istiyorsanız tıklayınız.

Öncelikle activity’mize butonumuz tıklandığında çağırılacak methodu tanımlayalım.

changeTutorial(View view) butona tıklandığı zaman çağırılacak metotumuz.

Layoutumuzun ise aşağıdaki gibi olmaktadır.

Yukarıdaki yaptığımız işlemleri kısaca özetleyelim. Databinding kullanırken herhangi bir tıklama olayını ( farklı bir event’ta olabilir), bunu activity’mize aktarmak için öncelikle activity’mizde çağırılacak methodu tanımladık , sonrasında bu activity’mizi layoutumuza aşağıdaki gibi variable olarak tanımladık.

Artık bizim layoutumuz içinden activity ile ilgili işlemler “activity” değişkeni ile yapılacak. Çünkü variable name’miz “activity” tanımladık.

Sonrasında butona tıklanıldığında ilgili methodu aşağıdaki gibi çağırıyoruz.

method içinde ne yaptığımıza bakacak olursak

data objemizi tekrardan set ediyoruz ve tekrardan bindings.setTutorial(data) diyerek datamızı ekranda gösteriyoruz.

Peki biz her data değiştiği zaman setTutorial()methodunu çağırmak zorundamıyız. Yani data objemizin herhangi bir değişkeni değiştiği zamansetTutorialmethodunu çağırmadan ekranımızda ki değerleri update edemez miyiz ?

Observable Objects

Yukarıdaki sorunun cevabı evet edebiliriz. Yani mainActivity’mizde sadece data objemizi güncelleyerek ekranımızı da güncelleyebiliriz. Bunu yapmamız için modelimizi yani TutorailData class’ımızı biraz değiştirmemiz gerekiyor. BaseObservable classını extend ederek aşağıdaki gibi güncellememiz gerekiyor.

Yukarıdaki kodda , kendi değeri değiştiğinde ekrandaki değerininde değişmesini istediğimiz değişkenin getter methodunun başına @Bindable annotation ekliyoruz ve setter methodlarına ise bir değişiklik olduğunda çağırılacak notifyPropertyChanged() methodunu ekliyoruz. @Bindable eklemediğimizde ve ya notifyPropertyChanged methodunu çağırmadığımızda işlemler gerçekleşmeyecektir.  notifyPropertyChanged() içindeki gönderdiğim BR class’ı ise otomatik generate edilecek bir class’tır.

Bu işlemleri yaptıktan sonra artık data objemizi değiştirdiğimiz an ekrandaki değerlerde otomatik olarak değişecektir. Aşağıdaki işlemi yaptıktan sonra tekrardan setTutorial() metodunu çağırmamıza gerek yoktur. Kendisi otomatik olarak ekrandaki değerini değiştirecektir.

Tüm değerleride değiştirmemize gerek yoktur. Aşağıda kod çalıştığı zaman ekran da sadece okunma sayısı değeri değişecektir.

 

Özet

Büyük projelerde sürekli findById() kullanarak itemleri Activity’e tanıtmak hem çok fazla kod yazmamıza sebep oluyor hem de test driven kod yazmanın önünde bir zorluk olarak duruyor. Data binding kullanarak hem kod hamallığından kurtulabilir hem de test driven kod yazmak için gerekli olan Application logic ile layout’ları birbirinden ayırabiliriz. Ayrıca sadece model data’mızı güncelleyerek ekrandaki componentlerimizi de güncelleyebiliriz. Kodun son halini paylaşacağım. Sizlerde inceleyerek projelerinizde kullanabilirsiniz.

Arkadaşlar mevcut bir projeniz varsa Data Binding’e geçirmek pek kolay olmayacaktır. Burda tercih sizindir. Fakat yeni başladığınız bir projenize kesinlikle Data Binding kullanarak başlamanızı öneririm. Ayrıca iş görüşmelerinde sizlere verilen ödevleri kesinlikle data binding ile yazmanızı öneririm 🙂 Ben bu dersimde elimden geldiğince basit bir biçimde anlatmaya çalıştım. Çok daha fazla özelliği bulunan data binding’i Android’in kendi sitesinden de incelemenizi kesinlikle tavsiye ederim.

Android Data Binding Kütüphanesi’nin kullanımını anlattığımız dersimizin sonuna geldik. Umarım sizler için yararlı olmuştur. Konu hakkında soru , görüş ve yorumlarını konu altından ve ya SoruCevap sitemizden sorabilirsiniz.

 

Sıfırdan Android derslerimiz için tıklayınız.

Taha Kırca

iOS & Android & Apple Watch Developer, Mobilhanem.com yazarı, Karadeniz Uşağu, Ordu Sevdalısı

Yorum Yaz

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?