Gözlemlenebilirlik, bir nesnenin başkalarını dönüşüm artışı elde etti. Veri Bağlama Kitaplığı, nesne, alan veya gözlemlenebilir koleksiyonlar.
Veri bağlama için istediğiniz nesneyi kullanabilirsiniz, ancak nesnenin değiştirilmesi kullanıcı arayüzünün güncellenmesine otomatik olarak neden olur. Verilerinizi sunmak için veri bağlamayı kullanabilirsiniz diğer nesneleri (buna dinleyici olarak bilinirler) en iyi yöntemin ne olduğunu öğreneceğiz. Üç tür gözlemlenebilir sınıf vardır: alanlar, koleksiyonlar ve nesneler.
Bu gözlemlenebilir veri nesnelerinden biri kullanıcı arayüzüne ve kullanıcı arayüzü otomatik olarak güncellenir.
Gözlemlenebilir alanlar
Sınıflarınızda sadece birkaç tesis varsa bunları yapmaya değmeyebilir
şunu uygulayan sınıflar oluştur:
Observable
arayüzü. Burada
durumda, genel Observable
sınıfını ve aşağıdaki
alanları gözlemlenebilir hale getirmek için temele özgü sınıflar:
ObservableBoolean
ObservableByte
ObservableChar
ObservableShort
ObservableInt
ObservableLong
ObservableFloat
ObservableDouble
ObservableParcelable
Gözlemlenebilir alanlar, kendi içinde tek bir
girin. İlkel sürümler erişim sırasında boks ve kutu açılımı yapmaktan kaçınır
anlamına gelir. Bu mekanizmayı kullanmak için Java'da bir public final
özelliği oluşturun.
aşağıda gösterildiği gibi, Kotlin biçiminde bir salt okunur özellik)
şu örneği inceleyin:
Kotlin
class User { val firstName = ObservableField<String>() val lastName = ObservableField<String>() val age = ObservableInt() }
Java
private static class User { public final ObservableField<String> firstName = new ObservableField<>(); public final ObservableField<String> lastName = new ObservableField<>(); public final ObservableInt age = new ObservableInt(); }
Alan değerine erişmek için
set()
ve
get()
erişimci yöntemi
veya Kotlin mülkünü kullanın
söz dizimi:
Kotlin
user.firstName = "Google" val age = user.age
Java
user.firstName.set("Google"); int age = user.age.get();
Gözlemlenebilir koleksiyonlar
Bazı uygulamalar, verileri saklamak için dinamik yapılar kullanır. Gözlemlenebilir koleksiyonlar
bu yapılara erişmek için bir anahtar kullanmanız gerekir. İlgili içeriği oluşturmak için kullanılan
ObservableArrayMap
sınıf
anahtarın, String
şu örneği inceleyin:
Kotlin
ObservableArrayMap<String, Any>().apply { put("firstName", "Google") put("lastName", "Inc.") put("age", 17) }
Java
ObservableArrayMap<String, Object> user = new ObservableArrayMap<>(); user.put("firstName", "Google"); user.put("lastName", "Inc."); user.put("age", 17);
Düzende, dize tuşlarını kullanarak haritayı bulmak için şu örneği inceleyin:
<data>
<import type="android.databinding.ObservableMap"/>
<variable name="user" type="ObservableMap<String, Object>"/>
</data>
…
<TextView
android:text="@{user.lastName}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:text="@{String.valueOf(1 + (Integer)user.age)}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
ObservableArrayList
sınıfı, anahtar aşağıda gösterildiği gibi bir tam sayı olduğunda kullanışlıdır:
Kotlin
ObservableArrayList<Any>().apply { add("Google") add("Inc.") add(17) }
Java
ObservableArrayList<Object> user = new ObservableArrayList<>(); user.add("Google"); user.add("Inc."); user.add(17);
Düzende, listeye şu örneği inceleyin:
<data>
<import type="android.databinding.ObservableList"/>
<import type="com.example.my.app.Fields"/>
<variable name="user" type="ObservableList<Object>"/>
</data>
…
<TextView
android:text='@{user[Fields.LAST_NAME]}'
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:text='@{String.valueOf(1 + (Integer)user[Fields.AGE])}'
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
Gözlemlenebilir nesneler
Observable
arayüzünü uygulayan bir sınıf, aşağıdakilerin kaydedilmesine olanak tanır:
gözlemlenebilir mülkteki mülk değişiklikleri hakkında bildirim almak isteyen dinleyiciler
nesnesini tanımlayın.
Observable
arayüzünde, işleyici ekleyip kaldıran bir mekanizma vardır, ancak
bildirimlerin ne zaman gönderileceğine karar verir. Veri, geliştirmeyi kolaylaştırmak amacıyla
Bağlama Kitaplığı
BaseObservable
sınıfı, hangi
dinleyici kayıt mekanizmasını uygular. Ölçüm işlemini gerçekleştiren veri sınıfı
Özellikler değiştiğinde bildirim göndermekten BaseObservable
sorumludur. Yapılacaklar
Bunun için bir Bindable
ek açıklaması atayın
alıcısına ilettiğim
notifyPropertyChanged()
yöntemini kullanın:
Kotlin
class User : BaseObservable() { @get:Bindable var firstName: String = "" set(value) { field = value notifyPropertyChanged(BR.firstName) } @get:Bindable var lastName: String = "" set(value) { field = value notifyPropertyChanged(BR.lastName) } }
Java
private static class User extends BaseObservable { private String firstName; private String lastName; @Bindable public String getFirstName() { return this.firstName; } @Bindable public String getLastName() { return this.lastName; } public void setFirstName(String firstName) { this.firstName = firstName; notifyPropertyChanged(BR.firstName); } public void setLastName(String lastName) { this.lastName = lastName; notifyPropertyChanged(BR.lastName); } }
Veri bağlama, modül paketinde BR
adında bir sınıf oluşturur. Bu sınıf, şunları içerir:
veri bağlama için kullanılan kaynakların kimlikleri. Bindable
ek açıklaması
derleme sırasında BR
sınıf dosyasında bir giriş oluşturur. Temel sınıf
değiştirilemez, Observable
arayüzünü uygulayabilirsiniz
profesyonel ve rahatlatıcı
PropertyChangeRegistry
yardımcı olacak bir nesnedir.
Yaşam döngüsüne duyarlı nesneler
Uygulamanızdaki düzenler, otomatik olarak bağlantı kuran kullanıcı arayüzünü verilerdeki değişikliklerle ilgili bilgilendirme. Bu şekilde, bağlamalarınız yaşam döngüsüne duyarlıdır ve yalnızca kullanıcı arayüzü ekranda göründüğünde tetiklenir.
Veri bağlama destekler
StateFlow
ve
LiveData
. Daha fazla bilgi için
LiveData
kullanarak veri bağlamada kullanımı hakkında daha fazla bilgi için Kullanıcı arayüzünü veriler hakkında bilgilendirmek için LiveData'yı kullanma
değişiklikler başlıklı makaleye göz atın.
StateFlow'u kullanma
Uygulamanızda Kotlin'i eş yordamlar ile birlikte kullanıyorsa
Veri bağlama kaynağı olarak StateFlow
nesne kullanılacak. Bir StateFlow
nesnesini şununla kullanmak için:
bağlamanın kapsamını tanımlamak için bir yaşam döngüsü sahibi belirtin
StateFlow
nesne algılandı. Aşağıdaki örnekte, etkinliği
yaşam döngüsü sahibi:
class ViewModelActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
// Inflate view and obtain an instance of the binding class.
val binding: UserBinding = DataBindingUtil.setContentView(this, R.layout.user)
// Specify the current activity as the lifecycle owner.
binding.lifecycleOwner = this
}
}
Düzen görünümlerini Mimariye bağlama konusunda açıklandığı gibi
Bileşenler, veri bağlama
ViewModel
ile sorunsuz şekilde çalışır
nesneler'i tıklayın. StateFlow
ve ViewModel
öğelerini aşağıdaki şekilde birlikte kullanabilirsiniz:
class ScheduleViewModel : ViewModel() {
private val _username = MutableStateFlow<String>("")
val username: StateFlow<String> = _username
init {
viewModelScope.launch {
_username.value = Repository.loadUserName()
}
}
}
Düzeninizde ViewModel
nesnenizin özelliklerini ve yöntemlerini
aşağıdaki gösterildiği gibi, bağlama ifadeleri kullanan karşılık gelen görünümler
örnek:
<TextView
android:id="@+id/name"
android:text="@{viewmodel.username}" />
Kullanıcının ad değeri her değiştiğinde kullanıcı arayüzü otomatik olarak güncellenir.
StateFlow desteğini devre dışı bırak
Kotlin ve AndroidX kullanan uygulamalar için StateFlow
desteği otomatik olarak
dahil edilir. Bu, eş yordamların bağımlılığının
halihazırda mevcut değilse uygulamanıza otomatik olarak eklenir.
Bu işlevi devre dışı bırakmak için
build.gradle
dosyası:
Eski
android { ... dataBinding { addKtx = false } }
Kotlin
android { ... dataBinding { addKtx = false } }
Alternatif olarak, aşağıdakileri ekleyerek projenizde StateFlow
öğesini genel olarak devre dışı bırakabilirsiniz:
gradle.properties
dosyasına aşağıdaki satırı ekleyin:
Eski
android.defaults.databinding.addKtx = false
Kotlin
android.defaults.databinding.addKtx = false
Ek kaynaklar
Veri bağlama hakkında daha fazla bilgi edinmek için aşağıdaki ek kaynaklara göz atın:
Örnekler
Codelab'ler
Blog yayınları
ziyaret edin.Sizin için önerilenler
- Not: JavaScript kapalıyken bağlantı metni gösterilir
- ViewModel için Kayıtlı Durum modülü
- Düzen görünümlerini Mimari Bileşenlere bağlama
- Çağrı kitaplığına genel bakış