برنامه نویس اندروید
دیتا بایندینگ: اضافه کردن متغییر به xml (قسمت دوم)
در قسمت قبل مقدمه ای از کتابخانه دیتا بایندینگ را ارائه کردیم و در مثالی نشان دادیم چگونه میتوان یه سری کد های خسته کننده که همواره در کدهایمان تکرار می شوند(که به اصطلاح به آنها بویلرپلیت کد گفته می شود)، مانند findViewById را از کدهایمان حذف کنیم. در این بخش میخواهیم بویلرپلیت کدهای بیشتری را از کدهایمان حذف کنیم.
فرض کنید می خواهید اطلاعات کاربر را نمایش دهید. باتوجه به مقاله قسمت قبل لیوت زیر را می سازیم.
user_info.xml
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/userImage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/userFirstName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/userLastName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
</layout>
و سپس داده ها را به این شکل به ویو میدهیم
private void setUser(User user, ViewGroup root) {
UserInfoBinding binding = UserInfoBinding.inflate(getLayoutInflater(), root, true);
binding.userFirstName.setText(user.firstName);
binding.userLastName.setText(user.lastName);
binding.userImage.setImageBitmap(user.image);
}
با اینکه کدهای بالا خیلی از کدهایی که با findViewById نوشته شده اند بهتر است اما هنوز بویلرپلیت کدهایی در آن یافت می شود که میتوان آنها را از کدحذف کرد.
کتابخانه دیتا بایندیگ راه حل ساده ای را در اختیارمان گذاشته است. میتوانیم در کدهای xml متغییری به نام user تعریف کنیم و در کدهای xml ویو ها را مقدار دهی کنیم. برای اینکار باید تگ data و variable را به شکل زیر به لیوت اضافه کنید.
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="user"
type="com.example.myapp.model.User"/>
</data>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:src="@{user.image}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:text="@{user.firstName}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:text="@{user.lastName}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
</layout>
برای ست کردن داده های ویو باید کدهای مربوط به دیتا بایندینگ را درون “@{…}” قرار دهید. برای مثال در کد بالا داریم
android:text="@{user.firstName}"
تا اینجای کار لیوت ما می داند چطور اطلاعاتی که در متغییر user هست را به ویوها دهد. اما ما هنوز متغییر user را مقدار دهی نکردیم. برای مقدار دهی user داریم
private void setUser(User user, ViewGroup root) {
UserInfoBinding binding = UserInfoBinding.inflate(getLayoutInflater(), root, true);
binding.setUser(user);
}
به همین راحتی!!!
در این بخش دیدیم که چگونه میتوان متغییر را به xml اضافه کرد و بویلرپلیت ها را کم کرد. ویژگی های جالبتر و کاربردی تری از کتابخانه دیتا بایندینگ ناگفته مانده است که در سری آموزش معماری mvvm بررسی خواهد شد.
لایک و سابسکرایب فراموش نشه. اگر هم سوالی داشتید تو کامنتا برسید! ممنون از همتون
مطلبی دیگر از این انتشارات
آموزش کانفیگ سیستم مانیتورینگ - Grafana
مطلبی دیگر از این انتشارات
مدیر محصول یا صاحب محصول، مسئله این است! (product manager or product owner)
مطلبی دیگر از این انتشارات
آموزش کانفیگ سیستم مانیتورینگ - Alertmanager