بهتره که با Data Binding آشنا بشی !


همیشه سعی میکنم که بهترین و بهینه ترین راه رو اجرا کنم تا سهولت بدم به پروژه هام و بعضی وقتا ممکنه بهترین راه ها همیشه اسون نباشه
من واقعا ازش جواب گرفتم و خیلی باعث تسریع تو کدام شده ( حداقل از دست findViewById خلاص شدم)

بررسی

شاید برای شما سوال پیش اومده باشه که Data Binding در برنامه نویسی اندروید چیه و چگونه استفاده می شه و اینکه چرا برای ساخت برنامه اندروید باید در یک فایل XML ظاهر برنامه را طراحی کنیم و بعد ویو ها را در فایل های جاوا قرار بدیم. یکی از روشهای استانداردی که شما میتوانید با کدهای بسیار کمتر و روش جذاب تر ویوهایی که در xml تعریف کردید را مقداردهی کنید استفاده از Data Binding . دیتا بایندینگ به ما کمک میکند تا بتونیم متغیرهای جاوا را به صورت مستقیم در xml وارد کنیم و از طرفی دیتابایندینگ به شما این امکان را میده تا برای همیشه با findViewById و setOnClickListener و ... خداحافظی کنید و کدهای بسیار تمیزتر و اصولی تری را استفاده کنید.

ما معمولا به این صورت View هارو Find میکردیم و خیلی وقت گیر بوده و خیلی زمان زیادی از ما میگرفت و باعث میشد که خیلی کدهای شلوغی داشته باشیم

ولی با DataBinding خیلی راحت میشه تو View بهش مقدار بدیم و دیگه نیازی زدن کد های بیشتر نباشه

شروع

برای اضافه کردن dataBinding به پروژه , App Build.gradle , دیتابایندیگ رو فعال کنید و یک دور پروژه رو Sync کنید و منتظر میمونیم تا پروژه build بشه مثل عکس زیر :

نحوه فایل های layout دیتابایندینگ یکم فرق میکنه و با تگ layout شروع میشه و در ادامه با المنت data که داخلش میتونید متغییر هاتون رو تعریف کنید و در ادامش هم خود view مثل زیر :

متغیریuser که من در Data تعریف کردم یک مدل رو توصیف میکنه که ممکنه من از اون داخل طرح استفاده کنم :

برای مقدار دهی از @{} استفاده میکنیم و از اون متغییر user که بالا استفاده کردیم کمک میگریم و دیتا رو توش میچینیم :

برای هر layout یک کلاس binding ساخته میشه , در حالت پیشفرض کلاس ساخته شده اسمش از layou منشا میگیره خب حالا این یعنی چی ؟ مثلا بر فرض activity_main.xml اسم layout باشه پس اسم کلاسمون میشه :

این کلاس تمام ویژگی های Binding مربوط به اون layout رو نگه میداره

ساخت Binding

برای تعریف بایندیگ تو اکتیویتی باید از طریق کلاس بایندینگ setContectView کنید به بهش layout رو بدید :

ما توی layou یک متغییر داریم به نام user که از اون مدل استفاده میکنیم تا دیتا ست کنیم به view ها , برای دادن مدل user به layout :

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

مدیریت کلیک ها

ما قبلا توی layout از استفاده میکردیم و یک تابع داخل کلاسمون تعریف میکردیم و بهش میدادیم یا اینکه view رو داخل اکتیوتی find میکردیم و setOnClickListener میساختیم ولی باید با همه اینا خداحافظی کنیم و بریم سمت تمیز کد زدن
چی میشد اگه داخل اکتیویتی یه کلاس داشتی و همه کلیک هارو اونجا هندل میکردی ؟ خوبیش اینه خیلی تمیز تر میشه کد هات و سریع میتونی به تمام کلیک ها و اکشن های داخل طرح دسترسی داشته باشی , خب باید بگم که با بایندینگ میتونی چنین کاری کنی , چجوری ؟ اینجوری :

داخل اکتیویتی یک کلاس تعریف میکنی :

و داخل layout میای تو النمت data یه متغیر تعریف میکنی به اسم handlers و بهش ادرس اون کلاس رو میدی و از طریق اون هندلر میتونی به اون کلاس MyHandlers دسترسی پیدا کنی :

و داخل اکتیویتی binding رو setHandler میکنی و این کلاس رو بهش میدی :

و یک نکته اینکه شما میتونید به وسیله id که به view ها میدید بهشون از طریق bindng بدون find کردن دسترسی داشته باشید :

شما چطور فکر میکنید ؟

ایا شما هم از dataBinding استفاده میکنید ؟ خوبه به نظرتون یا بد ؟ تجربیاتتون رو کامنت کنید !

ممنون از توجه شما

امیدوارم که تونسته باشه مفید واقع بشه , خواستم یکم ساده توضیح بدم که برای همه قابل درک باشه
راستی ی سری به پست های قبلیم هم بندازید اگه نظری داشتید حتما کامنت کنید چون من اعتقاد دارم چیزی رو اموزش بدی خودت بهتر یاد میگیری و فیدبک شما بهم کمک بزرگی میکنه

اگه برنامه نویس اندروید هستی و نیاز داری که اپت تو گوگل پلی قرار بگیره یه سر به این پست بزن :

https://vrgl.ir/vMKTC
واگهبهکدنویسیتمیزعلاقهداریبهتپیشنهادمیکنمکهاینمیهنگاهبندازی:
https://vrgl.ir/KZWHV


Ref : https://developer.android.com/topic/libraries/data-binding