Kotlin Data Binding
Bu blog, Data Binding kitaplığının kullanımı için açıklamalar içermektedir.
Günümüzde modern bir uygulama oluştururken performans, bellek sızıntıları, render hızı ve daha fazlası gibi şeyleri hesaba katmak gerekir.
Data Binding, geliştiricilerin Android uygulamalarında render hızının yavaşlığını önleyen gelişmiş bir konudur. Data Binding kullanmanın bazı avantajları, bellek sızıntılarını veya nullPointerException
gibi hataların önlenmesi, findViewById çağrılarının azaltılması ve Jetpack Compose kullanarak declarative UI oluşturmayı sağlamaktadır.
Bu eğitimde şunları ele alacağız:
- Data Binding nedir?
- Android uygulamasında veri bağlamayı etkinleştirme
- Örnek Android Layout’u içerisinde Data Binding sınıfının kullanılması
- Veri Bağlama findViewById’den nasıl daha hızlıdır?
- Binding click listener kullanımı
Data Binding nedir?
Type safe ve null safe bir yaklaşımda görünümlere erişmek için Android uygulama geliştirmede benimsenen gelişmiş bir yaklaşımdır.
Veri bağlama, ilgili veri öğelerinin sayısına bağlı olarak basit veya karmaşık olabilir. Microsoft’a göre, basit bir veri bağlama, tek bir veri öğesini bağlayabilirken, karmaşık bir veri bağlama, birden çok veri öğesini bağlar. Veri bağlama ile, bir veri kümesindeki bir öğede yapılan değişiklik, veri kümesinin geri kalanını otomatik olarak günceller.
Şimdi ilgili kitaplığı proje içerisinde kullanabilmek için nasıl etkinleştirebileceğimize göz atacağız.
Android Uygulamasında Veri Bağlamayı Etkinleştirme
İlk olarak, veri bağlama kitaplığı ile çalışabilmek için geliştirme ortamımızı kurmamız gerekecek. Geliştirme ortamı kurulduktan sonra, veri bağlama kitaplığını etkinleştirelim. Bunu yapmak için, aşağıdaki kod parçacığında gösterildiği gibi app düzeyinde build.gradle dosyanızda veri bağlama oluşturma seçeneğini etkinleştirerek uygulamanızı yapılandırabilirsiniz.
android { ...
buildFeatures {
dataBinding true
}
}
Veri bağlama yaklaşımı, çalışma zamanında oluşturulduğunda veya yeniden oluşturulduktan sonra layout öğelerini bulup, değişiklik yapmayı sağlayan View Binding işleminden daha verimlidir.
Örnek Android Layout’u İçerisinde Data Binding Sınıfının Kullanılması
Veri bağlama yardımcı sınıfı, geniş layout dosyalarına sahip Android projeleri için çok kullanışlıdır. Yardımcı sınıf herhangi bir ek yük olmadan görünüme erişmemizi sağlar. Bu bölümde, Personal sınıfına veri bağlama eklemek için gerekli adımları göreceğiz.
Veri Bağlama findViewById
‘den Nasıl Daha Hızlıdır?
Veri bağlamanın ardındaki fikir, iki uzak bilgiyi derleme zamanında birbirine bağlayan ve bunları çalışma zamanında kullanılabilir hale hale getiren nesneler oluşturmaktır. Böylece onları aramak ve tek tek güncellemek zorunda kalmazsınız. Kullanılabilir hale getirilen nesneler, derleyici tarafından oluşturulur ve bağlama nesnesi olarak adlandırılır.
Veri bağlama, aşağıdaki kod parçacığını kaldırmak kaldırmayı amaçlamaktadır.
findViewById(R.id.age).apply {
text = viewModel.age
}
Daha etkili kullanımı, aşağıdaki kod parçasını kullanarak yapılmaktadır.
buildFeatures {
dataBinding true
}
Önceki bölümde anlatıldığı gibi app veya module düzeyinde build.gradle dosyasında dataBinding etkinleştirildikten sonra uygulayabiliriz.
İlk olarak, activite_main.xml içerisindeki tüm görünümleri bir <layout> etiketine sardığınızdan emin olun. Anlaşılabilir olmak için ilgili örneği aşağıya bırakıyorum.
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<ConstraintLayout... /> <!-- UI layout's root element -->
</layout>
Ardından, aşağıdaki kod parçacığını kullanarak ana etkinlikte bir bağlama nesnesi oluşturun:
private lateinit var binding: ActivityMainBinding
Ardından, onCreate içerisinde içerik görünümünü ayarlamak için DataBindingUtil yardımcı sınıfını kullanın:
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
findViewById’e yapılan tüm çağrıları bağlama nesnesiyle değiştirin:
binding.doneButton.setOnClickListener
Görüntülemeyi düşündüğünüz veri kümesi için bir veri sınıfı oluşturun. Ben yukarıda bahsettiğim gibi Personal adında bir sınıf oluşturacağım:
data class Personal(var name: String = "", var age: String = "")
Ardından, activity_main.xml dosyasına bir data bloğunu ekleyebiliriz. Data bloğunu, ana(root) view etiketinden önce layout etiketinin içine ekleyin. Data bloğunun içine Personal sınıfı için bir değişken ekleyin:
<data>
<variable
name="Personal"
type="mobi.kodlayiruk.guide.model.Personal" />
</data>
nameText, ageEdit ve ageText görünümlerine text kaynağını parametre olarak alan başvurularla değiştirin, örneğin:
android:text="@={Personal.name}"
MainActivity sınıfı içerisinde Personal nesnesi oluşturalım:
private val personal: Personal = Personal("Elena Allison")
İlgili sınıfın içinde bulunan onCreate() metodu içerisinde layout’un içinde belirtilen data bloğunu eşleştirelim:
binding.Personal = personal
Binding Click Listener Kullanımı
Direk örnek kullanım ile nasıl kullanacağımızı göstermeye çalışacağım. Burada kullanacağımız ClickListener yardımcı sınıfı, onButtonClick() yönteminin tetiklenmesine ve o sırada layout içerisinde belirttiğimiz görünümün tıklanabilir olmasını sağlayacaktır:
interface ClickListener {
fun onButtonClick(v: View?)
}
Ardından layout içerisini şu şekilde güncelleyelim:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="listener"
type="mobi.kodlayiruk.guide.listener.ClickListener"/>
</data>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="click me"
android:onClick="@{listener.onButtonClick}"/>
</RelativeLayout>
</layout>
Layout’u düzenledikten sonra kullanacağımız sınıf içerisinde ilgili arayüzü etkinleştirip, uygulayabiliriz:
class MainActivity : Activity(), ClickListener {
private var binding: ActivityMainBinding? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
binding.setListener(this)
}
fun onButtonClick(v: View?) {
Toast.makeText(context, "Button clicked", Toast.LENGTH_LONG).show()
}
}
Umarım blog, Veri bağlama yardımcı sınıfını anlamanıza yardımcı olmuştur. Aklınıza takılan soruların cevabını almak isterseniz dilerseniz yorumlara yazabilirsiniz. Ayrıca Android’in vermiş olduğu https://kotlinlang.org/docs/ dokümandan bilgi alabilirsiniz.