اداپتر متدهای "onCreateViewHolder" و "onBindViewHolder" و همچنین کلاس داخلی ViewHolder تحت تاثیر قرار میگیرد. کد زیر اداپتر اپ انیمیشن رو نشون میده. تغییرات مشخص هستن.
اداپتر متدهای "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 کد هایلایت شده رو اضافه میکنیم:
برای بعضی third libraryها باید پروگارد رو غیر فعال کنیم. توی گیت اکثر کتابخونه ها قوانین پروگاردشون نوشته شده که باید توی فایل proguard-rules.pro کپی پیست شه.
مثلا اینجوری نوشته میشه:
-keep class اسم کامل کلاس.**
دستورات dontWarn و اینا هم داره.
این ریپازیتوری قوانین پروگارد اکثر کتابخونه ها رو نوشته.
این کتابخونه هم خودش به صورت خودکار قوانین لازم برای پروگارد رو اضافه میکنه و نیازی نیست ما کاری انجام بدیم.
پروگارد یه نرم افزار کامند لاینی هست که جز SDK اندروید بوده و باهاش میشه کار minimize، hide و optimize برای کد انجام داد.
اندروید استودیوی جدید از R8 بجای پروگارد استفاده میکنه. برای فعال سازی R8 از کد زیر در گریدل استفاده میشود:
buildTypes {
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
از این کتابخانه برای راحت شدن از شر findViewByID ها استفاده میشود.
خلاصه آموزش:
با نوشتن کد زیر یک تکست ویو به آی دی tv_noNetwork بایند میشود و در برنامه توسط tv_noNetwork به این ویو دسترسی داریم.