لینک پروفایل مدیوم همونی که دیتا بایندینگ رو برای اندروید دولوپ کرده
داکیومنت های خیلی خوبی در مورد دیتا بایندینگ نوشته که اکثرا توی استک اور فلو رفرنس میدن
اداپتر متدهای "onCreateViewHolder" و "onBindViewHolder" و همچنین کلاس داخلی ViewHolder تحت تاثیر قرار میگیرد. کد زیر اداپتر اپ انیمیشن رو نشون میده. تغییرات مشخص هستن.
در دیتا بایندینگ میشه کالکشن ها، int و String و اینا رو هم استفاده کرد. برای استفاده از ArrayList باید پکیج لیست رو import کنیم. البته تعریف جنریک در XML سینتکس متفاوتی داره:
<data>
<import type="java.util.List" />
<import type="com.mimdal.bestcartoons.model.Cartoon" />
<variable
name="cartoons"
type="List<Cartoon>" />
</data>
برای اینکه لاجیک مربوط به کد توی XML بتونه برای ویو ست بشه، اتریبیوت های جدیدی برای ویو تعریف میکنیم و مقدار مورد نظر رو از طریق اونها در XML به ویو میدهیم. برای این کار از annotation
@BindingAdapter()
استفاده میشه.
متدی که کاستوم setter ایجاد میکنه باید استاتیک بوده و ویوی مورد نظر که قراره اتریبیوت جدید برای اون تعریف شه، جز آرگومان هاش باشه. مثلا:
@BindingAdapter("loadImage")
public static void setImage(ImageView view, int id){
view.setImageResource(id);
}
رشته ای که در پرانتز BindingAdapter نوشته میشه، اسم اتریبیوت هست. در متد بالا این اتریبیوت برای ImageViewها تعریف میشه و آرگومان دوم میگه که مقدار این اتریبیوت یک int هست.
نحوه استفاده از این اتریبیوت در ویوی ImageView:
app:loadImage="@{cartoon.image}"
استفاده از دیتا بایندینگ راهیه که از شر findViewById اینا راحت شیم و کدنویسی رو کوتاه تر میکنه.
برای فعال سازی دیتا بایندینگ، در build.gradle کد هایلایت شده رو اضافه میکنیم: