Tek yönlü veri bağlamayı kullanarak bir özellik için değer ayarlayabilir ve tepki veren bir dinleyici olarak nitelendirilirler:
<CheckBox android:id="@+id/rememberMeCheckBox" android:checked="@{viewmodel.rememberMe}" android:onCheckedChanged="@{viewmodel.rememberMeChanged}" />
İki yönlü veri bağlama bu işlemin kısayolunu sağlar:
<CheckBox android:id="@+id/rememberMeCheckBox" android:checked="@={viewmodel.rememberMe}" />
Önemli bir özelliği "=" içeren @={}
gösterimi işareti, veri alır
ve kullanıcı güncellemelerini aynı anda dinleyebilirsiniz.
Yedek verilerdeki değişikliklere tepki vermek amacıyla düzeninizi
değişken bir Observable
uygulaması vardır, genellikle
BaseObservable
ve
Aşağıdaki şekilde gösterildiği gibi @Bindable
ek açıklaması
şu kod snippet'ini kullanabilirsiniz:
Kotlin
class LoginViewModel : BaseObservable { // val data = ... @Bindable fun getRememberMe(): Boolean { return data.rememberMe } fun setRememberMe(value: Boolean) { // Avoids infinite loops. if (data.rememberMe != value) { data.rememberMe = value // React to the change. saveData() // Notify observers of a new value. notifyPropertyChanged(BR.remember_me) } } }
Java
public class LoginViewModel extends BaseObservable { // private Model data = ... @Bindable public Boolean getRememberMe() { return data.rememberMe; } public void setRememberMe(Boolean value) { // Avoids infinite loops. if (data.rememberMe != value) { data.rememberMe = value; // React to the change. saveData(); // Notify observers of a new value. notifyPropertyChanged(BR.remember_me); } } }
Bağlanabilir mülkün alıcı yöntemi getRememberMe()
olarak adlandırıldığından
ilgili setter yöntemi, adı otomatik olarak kullanır.
setRememberMe()
.
BaseObservable
ve @Bindable
özelliklerini kullanma hakkında daha fazla bilgi için Şunlarla çalışma:
gözlemlenebilir veri nesnelerini inceleyin.
Özel özellikler kullanarak çift yönlü veri bağlama
Platform, en yaygın veriler için iki yönlü veri bağlama
iki yönlü özellikler ve değişiklik dinleyicileri gibi
uygulamanızın bir parçası olarak kullanın. Özel yapılandırma ile iki yönlü veri bağlamayı kullanmak istiyorsanız
özellikleri kullanmak için
@InverseBindingAdapter
ve
@InverseBindingMethod
ek açıklamalar.
Örneğin, bir "time"
özelliğinde iki yönlü veri bağlamayı etkinleştirmek isterseniz
MyView
adlı özel görünümde aşağıdaki adımları tamamlayın:
İlk değeri belirleyen ve değer olduğunda güncelleyen yöntemi ek açıklama olarak belirtin.
@BindingAdapter
kullanılarak yapılan değişiklikler:Kotlin
@BindingAdapter("time") @JvmStatic fun setTime(view: MyView, newValue: Time) { // Important to break potential infinite loops. if (view.time != newValue) { view.time = newValue } }
Java
@BindingAdapter("time") public static void setTime(MyView view, Time newValue) { // Important to break potential infinite loops. if (view.time != newValue) { view.time = newValue; } }
Görünümdeki değeri okuyan yönteme ek açıklama eklemek için
@InverseBindingAdapter
:Kotlin
@InverseBindingAdapter("time") @JvmStatic fun getTime(view: MyView) : Time { return view.getTime() }
Java
@InverseBindingAdapter("time") public static Time getTime(MyView view) { return view.getTime(); }
Bu noktada, veri bağlama, veriler değiştiğinde ne yapılacağını bilir (
yönteminde belirtildiği şekilde
@BindingAdapter
) ve yapmanız gerekenler
çağrısına bağlı olarak, görünüm özelliği değiştiğinde (
InverseBindingListener
).
Ancak, özelliğin ne zaman ve nasıl değiştiğini bilmez.
Bunun için görünümde bir dinleyici ayarlamanız gerekir. Bu özel bir işleyici olabilir
olabilir ya da bir kayıp gibi genel bir etkinlik olabilir
değişiklik gösterebilir. @BindingAdapter
ek açıklamasını yönteme ekleyin
işleyiciyi mülkteki değişiklikler için ayarlar:
Kotlin
@BindingAdapter("app:timeAttrChanged") @JvmStatic fun setListeners( view: MyView, attrChange: InverseBindingListener ) { // Set a listener for click, focus, touch, etc. }
Java
@BindingAdapter("app:timeAttrChanged") public static void setListeners( MyView view, final InverseBindingListener attrChange) { // Set a listener for click, focus, touch, etc. }
İşleyici, parametre olarak bir InverseBindingListener
ekler. Önce
InverseBindingListener
(veri bağlama sistemine özelliğin olduğunu bildirir)
değiştirildi. Daha sonra sistem,
@InverseBindingAdapter
vb.
Pratikte bu dinleyici, dinleyenler de dahil olmak üzere bazı önemsiz mantıksal unsurlara da yer verir.
tek yönlü veri bağlama için kullanılabilir. Örneğin, metin özelliğinin bağdaştırıcısına bakın
değişiklik,
TextViewBindingAdapter
.
Dönüşüm sağlayan kullanıcı sayısı
View
nesnesine bağlı değişken
görüntülenmeden önce biçimlendirilmesi, çevrilmesi veya değiştirilmesi
gerektiğini unutmayın.
Converter
nesnesi kullanılabilir.
Örneğin, tarih gösteren bir EditText
nesnesini alın:
<EditText
android:id="@+id/birth_date"
android:text="@={Converter.dateToString(viewmodel.birthDate)}"
/>
viewmodel.birthDate
özelliği, Long
türünde bir değer içerdiği için
biçimlendirilmesi için gereklidir.
İki yönlü bir ifade kullanıldığından, aynı zamanda ters
dönüştürücü kullanın.
yedek veri türüne (bu örnekte Long
) ekle. Bu işlem,
@InverseMethod
ek açıklaması
dönüşümü sağlayanlardan birine göndermeli ve bu ek açıklamanın
dönüştürücü. Bu yapılandırmanın bir örneği aşağıdaki kodda gösterilmiştir
snippet:
Kotlin
object Converter { @InverseMethod("stringToDate") @JvmStatic fun dateToString( view: EditText, oldValue: Long, value: Long ): String { // Converts long to String. } @JvmStatic fun stringToDate( view: EditText, oldValue: String, value: String ): Long { // Converts String to long. } }
Java
public class Converter { @InverseMethod("stringToDate") public static String dateToString(EditText view, long oldValue, long value) { // Converts long to String. } public static long stringToDate(EditText view, String oldValue, String value) { // Converts String to long. } }
İki yönlü veri bağlama kullanan sonsuz döngüler
İki yönlü veri bağlama kullanırken sonsuz döngüler oluşturmamaya dikkat edin. Zaman
kullanıcı bir özelliği değiştirdiğinde
@InverseBindingAdapter
çağrılır ve değer, yedeklemeye atanır.
Böylece,
@BindingAdapter
; bu, açıklama eklenen yönteme yönelik başka bir çağrıyı tetikler
@InverseBindingAdapter
vb. kullanarak.
Bu nedenle, zaman çizelgesine uyabilmeniz için
@BindingAdapter
kullanılarak ek açıklama eklenen yöntemlerdeki yeni ve eski değerler.
İki yönlü özellikler
Platform, şunları kullandığınızda iki yönlü veri bağlama için yerleşik destek sağlar: özellikleri kullanın. Platformun sunduğu imkanlarla ilgili ilgili bağlama bağdaştırıcılarının uygulamalarına bakın:
Sınıf | Özellikler | Bağlama adaptörü |
---|---|---|
AdapterView
|
android:selectedItemPosition android:selection |
AdapterViewBindingAdapter
|
CalendarView |
android:date |
CalendarViewBindingAdapter
|
CompoundButton |
android:checked
|
CompoundButtonBindingAdapter
|
DatePicker
|
android:year android:month android:day |
DatePickerBindingAdapter
|
NumberPicker |
android:value
|
NumberPickerBindingAdapter
|
RadioButton
|
android:checkedButton |
RadioGroupBindingAdapter
|
RatingBar
|
android:rating
|
RatingBarBindingAdapter
|
SeekBar
|
android:progress |
SeekBarBindingAdapter
|
TabHost
|
android:currentTab |
TabHostBindingAdapter
|
TextView
|
android:text
|
TextViewBindingAdapter
|
TimePicker
|
android:hour android:minute |
TimePickerBindingAdapter
|
Ek kaynaklar
Veri bağlama hakkında daha fazla bilgi için aşağıdakilere bakın ek kaynaklar.
Örnekler
Codelab'ler
Blog yayınları
Sizin için önerilenler
- Not: JavaScript kapalıyken bağlantı metni gösterilir
- Gözlemlenebilir veri nesneleriyle çalışma
- Düzenler ve bağlama ifadeleri
- Düzen görünümlerini Mimari Bileşenlere bağlama