Veri Bağlama Kitaplığı, ve görünümlerini oluşturabilirsiniz. Bu belgelerde, projenizin nasıl oluşturulan bağlama sınıflarını özelleştirin.
Oluşturulan bağlama sınıfı, düzen değişkenlerini
kullanır. Adını ve paketini özelleştirebilirsiniz:
yapabilirsiniz. Oluşturulan tüm bağlama sınıfları
ViewDataBinding
sınıfı.
Her düzen dosyası için bir bağlama sınıfı oluşturulur. Varsayılan olarak
class, Binding ile Pascal büyük/küçük harfe dönüştürülen düzen dosyasının adıdır.
sonek eklenir. Örneğin, düzen dosya adı
activity_main.xml
, oluşturulmuş ilgili sınıf: ActivityMainBinding
.
Bu sınıf, düzen özelliklerinden düzenin
görünümleri ve bağlama ifadeleri için nasıl değer atayacağı konusunda bilgi sahibidir.
Bağlama nesnesi oluşturma
Bağlama nesnesi, düzen şişirildikten hemen sonra oluşturulur
görünüm hiyerarşisinin,
anlamına gelir. Nesneyi bir
düzen, bağlama sınıfında statik yöntemleri kullanmaktır. Hedef ROAS'ı
hiyerarşiyi görüntülemek ve şunun inflate()
yöntemini kullanarak nesneyi ona bağlamak
bağlama sınıfını (aşağıdaki örnekte gösterildiği gibi) seçin:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val binding: MyLayoutBinding = MyLayoutBinding.inflate(layoutInflater) setContentView(binding.root) }
Java
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); MyLayoutBinding binding = MyLayoutBinding.inflate(getLayoutInflater()); setContentView(binding.root); }
inflate()
yönteminin alternatif bir sürümü de vardır.
Ek olarak ViewGroup
nesnesi
LayoutInflater
nesnesi
aşağıdaki örnekte gösterilmektedir:
Kotlin
val binding: MyLayoutBinding = MyLayoutBinding.inflate(getLayoutInflater(), viewGroup, false)
Java
MyLayoutBinding binding = MyLayoutBinding.inflate(getLayoutInflater(), viewGroup, false);
Düzen farklı bir mekanizma kullanılarak şişirilmişse bağlayabilirsiniz aşağıdaki gibi ayrı ayrı ele alabilirsiniz:
Kotlin
val binding: MyLayoutBinding = MyLayoutBinding.bind(viewRoot)
Java
MyLayoutBinding binding = MyLayoutBinding.bind(viewRoot);
Bazen bağlama türünü önceden bilmezsiniz. Bu tür durumlarda
bağlantıyı kullanarak bağlamayı oluşturun
DataBindingUtil
sınıf,
aşağıdaki kod snippet'inde gösterildiği gibidir:
Kotlin
val viewRoot = LayoutInflater.from(this).inflate(layoutId, parent, attachToParent) val binding: ViewDataBinding? = DataBindingUtil.bind(viewRoot)
Java
View viewRoot = LayoutInflater.from(this).inflate(layoutId, parent, attachToParent); ViewDataBinding binding = DataBindingUtil.bind(viewRoot);
Bir
Fragment
ListView
veya
RecyclerView
adaptörü kullanmayı tercih ederseniz
inflate()
yöntemlerinin veya
DataBindingUtil
sınıfında
aşağıdaki kod örneğinde gösterilmiştir:
Kotlin
val listItemBinding = ListItemBinding.inflate(layoutInflater, viewGroup, false) // or val listItemBinding = DataBindingUtil.inflate(layoutInflater, R.layout.list_item, viewGroup, false)
Java
ListItemBinding binding = ListItemBinding.inflate(layoutInflater, viewGroup, false); // or ListItemBinding binding = DataBindingUtil.inflate(layoutInflater, R.layout.list_item, viewGroup, false);
Kimlik içeren görünümler
Veri Bağlama Kitaplığı,
görünümdeki değerleri
ayarlamanızı sağlar. Örneğin, Veri Bağlama Kitaplığı
firstName
ve lastName
TextView
şu düzen:
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable name="user" type="com.example.User"/>
</data>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.firstName}"
android:id="@+id/firstName"/>
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.lastName}"
android:id="@+id/lastName"/>
</LinearLayout>
</layout>
Kitaplık, kimlikleri de içeren görünümleri bir
tek kullanımlık. Bu mekanizma,
findViewById()
yöntemini çağırın.
Kimlikler veri bağlaması olmadığı kadar gerekli değildir ancak Kodlardan görünümlere erişimin gerekli olduğu bazı durumlarda
Değişkenler
Veri Bağlama Kitaplığı, bildirilen her değişken için erişimci yöntemleri oluşturur
tıklayın. Örneğin, aşağıdaki düzen, belirleyici ve alıcı oluşturur
yöntemleri: user
, image
ve note
değişkenleri için bağlama sınıfında
<data>
<import type="android.graphics.drawable.Drawable"/>
<variable name="user" type="com.example.User"/>
<variable name="image" type="Drawable"/>
<variable name="note" type="String"/>
</data>
Görüntüleme Koçanı
Normal görünümlerden farklı olarak ViewStub
nesneleri
görünmez görünümler olarak başlar. Görünür hale getirildiğinde veya açıkça şişirildiğinde,
başka bir düzeni şişirerek düzende kendilerini değiştirirler.
ViewStub
görünüm hiyerarşisinden kaybolduğu için
atık toplama yoluyla talep edilebilmesi için bağlayıcı nesnenin de kaybolması gerekir.
Görüntülemeler nihai olduğu için
ViewStubProxy
nesne
oluşturulan bağlama sınıfındaki ViewStub
yerini alır. Böylece,
ViewStub
öğesine ve şişirilmiş görünüme erişme
ViewStub
şişirildiğinde hiyerarşiye bakalım.
Başka bir düzeni şişirirken yeni düzen için bir bağlama oluşturulmalıdır.
Bu nedenle, ViewStubProxy
, ViewStub
komutunu dinlemelidir
OnInflateListener
ve gerektiğinde bağlantıyı oluşturun. Tek seferde yalnızca bir dinleyici olabilir.
zaman, ViewStubProxy
bir OnInflateListener
ayarlamanıza olanak sağlar.
oluşturmanız gerekir.
Hemen bağlama
Bir değişken veya gözlemlenebilir nesne değiştiğinde bağlama, değişmek üzere programlanır.
kareden önce dokunun. Bununla birlikte, bağlamanın yürütülmesi gereken durumlar vardır
hemen teslim edebilirsiniz. Yürütmeyi zorunlu kılmak için
executePendingBindings()
yöntemidir.
Dinamik değişkenler
Bazen belirli bağlama sınıfı bilinmiyor. Örneğin,
RecyclerView.Adapter
rastgele düzenlere çalışırken spesifik bağlama sınıfını bilmez. Google
bağlama değerini,
onBindViewHolder()
yöntemidir.
Aşağıdaki örnekte, RecyclerView
öğesinin bağlandığı tüm düzenlerde
item
değişkeni BindingHolder
nesnesi, getBinding()
yöntemi içeriyor
ViewDataBinding
tabanı
sınıfını kullanır.
Kotlin
override fun onBindViewHolder(holder: BindingHolder, position: Int) { item: T = items.get(position) holder.binding.setVariable(BR.item, item); holder.binding.executePendingBindings(); }
Java
public void onBindViewHolder(BindingHolder holder, int position) { final T item = items.get(position); holder.getBinding().setVariable(BR.item, item); holder.getBinding().executePendingBindings(); }
Arka plan ileti dizisi
koleksiyonudur. Veri bağlama, değerlendirme sırasında her değişkeni veya alanı gibi sorunlara yol açabilir.
Özel bağlama sınıfı adları
Varsayılan olarak, bağlama sınıfının oluşturulması için düzen dosyasının adı,
büyük harfle başlayıp alt çizgi ( _ ) kaldırarak,
ardından gelen harf ve Binding kelimesinin son ekini ekleyin. Örneğin, düzen dosyası
contact_item.xml
, ContactItemBinding
sınıfını oluşturur. Sınıf yerleştirildi
modül paketi kapsamında bir databinding
paketinde bulunur. Örneğin, modüler
paketi com.example.my.app
ise bağlama sınıfı
com.example.my.app.databinding
paketi.
Bağlama sınıfları yeniden adlandırılabilir veya
data
öğesinin class
özelliği. Örneğin, aşağıdaki düzen
şunun databinding
paketinde ContactItem
bağlama sınıfını oluşturur:
mevcut modül:
<data class="ContactItem">
...
</data>
Bağlama sınıfını, sınıfın önüne ekleyerek farklı bir pakette oluşturabilirsiniz. bir nokta kullanın. Aşağıdaki örnek, modül paketi:
<data class=".ContactItem">
...
</data>
Bağlama sınıfının olmasını istediğiniz tam paket adını da kullanabilirsiniz
elde edilir. Aşağıdaki örnek, ContactItem
bağlama sınıfını
com.example
paketi:
<data class="com.example.ContactItem">
...
</data>
Ek kaynaklar
Veri bağlama hakkında daha fazla bilgi edinmek için aşağıdaki ek kaynaklara bakın.
ziyaret edin.Sizin için önerilenler
- Not: JavaScript kapalıyken bağlantı metni gösterilir
- Düzenler ve bağlama ifadeleri
- Veri Bağlama Kitaplığı
- Bağlamı göster