Oluşturulan bağlama sınıfları

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. ziyaret edin.