ویرگول
ورودثبت نام
امیر حسین باقری
امیر حسین باقریبرنامه نویس اندروید
امیر حسین باقری
امیر حسین باقری
خواندن ۲ دقیقه·۶ سال پیش

دیتا بایندینگ: اضافه کردن متغییر به 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 بررسی خواهد شد.

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

databindingdata binding
۱۸
۱
امیر حسین باقری
امیر حسین باقری
برنامه نویس اندروید
بیستون
بیستون
خلاقیت قلب هر رویاست. هر ایده و هر قدم بزرگ که جهان ما را تغییر می‌دهد با دورنمایی شروع می‌شود که خالقان آن ایده دارند و ما در شرکت بیستون ابزارهایی که آن خالقان نیاز دارند را برایشان مهیا می‌سازیم تا ایده‌هایشان را به واقعیت بدل کنند.
شاید از این پست‌ها خوشتان بیاید