دیتا بایندینگ: اضافه کردن متغییر به xml (قسمت دوم)

در قسمت قبل مقدمه ای از کتابخانه دیتا بایندینگ را ارائه کردیم و در مثالی نشان دادیم چگونه میتوان یه سری کد های خسته کننده که همواره در کدهایمان تکرار می شوند(که به اصطلاح به آنها بویلرپلیت کد گفته می شود)، مانند findViewById را از کدهایمان حذف کنیم. در این بخش میخواهیم بویلرپلیت کدهای بیشتری را از کدهایمان حذف کنیم.

فرض کنید می خواهید اطلاعات کاربر را نمایش دهید. باتوجه به مقاله قسمت قبل لیوت زیر را می سازیم.

user_info.xml
<?xml version=&quot1.0&quot encoding=&quotutf-8&quot?>
<layout xmlns:android=&quothttp://schemas.android.com/apk/res/android&quot>
    <LinearLayout
            android:orientation=&quotvertical&quot
            android:layout_width=&quotmatch_parent&quot
            android:layout_height=&quotmatch_parent&quot>
        <ImageView
                android:id=&quot@+id/userImage&quot
                android:layout_width=&quotwrap_content&quot
                android:layout_height=&quotwrap_content&quot/>
        <TextView
                android:id=&quot@+id/userFirstName&quot
                android:layout_width=&quotwrap_content&quot
                android:layout_height=&quotwrap_content&quot/>

        <TextView
                android:id=&quot@+id/userLastName&quot
                android:layout_width=&quotwrap_content&quot
                android:layout_height=&quotwrap_content&quot/>
    </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=&quot1.0&quot encoding=&quotutf-8&quot?>
<layout xmlns:android=&quothttp://schemas.android.com/apk/res/android&quot>
    <data>
 <variable
 name=&quotuser&quot
 type=&quotcom.example.myapp.model.User&quot/>
    </data>
    <LinearLayout
            android:orientation=&quotvertical&quot
            android:layout_width=&quotmatch_parent&quot
            android:layout_height=&quotmatch_parent&quot>
        <ImageView
                android:src=&quot@{user.image}&quot
                android:layout_width=&quotwrap_content&quot
                android:layout_height=&quotwrap_content&quot/>
        <TextView
                android:text=&quot@{user.firstName}&quot
                android:layout_width=&quotwrap_content&quot
                android:layout_height=&quotwrap_content&quot/>

        <TextView
                android:text=&quot@{user.lastName}&quot
                android:layout_width=&quotwrap_content&quot
                android:layout_height=&quotwrap_content&quot/>
    </LinearLayout>
</layout>

برای ست کردن داده های ویو باید کدهای مربوط به دیتا بایندینگ را درون “@{…}” قرار دهید. برای مثال در کد بالا داریم

 android:text=&quot@{user.firstName}&quot

تا اینجای کار لیوت ما می داند چطور اطلاعاتی که در متغییر user هست را به ویوها دهد. اما ما هنوز متغییر user را مقدار دهی نکردیم. برای مقدار دهی user داریم

private void setUser(User user, ViewGroup root) {
    UserInfoBinding binding = UserInfoBinding.inflate(getLayoutInflater(), root, true);
    binding.setUser(user);
}

به همین راحتی!!!

در این بخش دیدیم که چگونه میتوان متغییر را به xml اضافه کرد و بویلرپلیت ها را کم کرد. ویژگی های جالبتر و کاربردی تری از کتابخانه دیتا بایندینگ ناگفته مانده است که در سری آموزش معماری mvvm بررسی خواهد شد.

لایک و سابسکرایب فراموش نشه. اگر هم سوالی داشتید تو کامنتا برسید! ممنون از همتون