در ادامه فیلم قسمت دوم، از دیتابایندینگ استفاده خواهیم کرد!
استفاده از DataBinding:
برای استفاده از DataBinding، ابتدا پروژه را make کنید تا برای ما کلاس ActivityMainBinding تشکیل شود.
Make project:
Build>Make project
بعد از انجام این کار، به کلاس MainActivity.kt رجوع کنید و متغیر binding را تعریف کنید:
privatelateinitvar binding: ActivityMainBinding
اما همانطور که مشاهده می کنید، کلاس ActivityMainBinding ناشناخته می باشد! چرا؟؟؟ به این دلیل که شما باید در فایل activity_main.xml نیز تغییراتی اعمال کنید! پس به فایل مذکور رجوع کنید:
حالا دوباره پروژه را Make کنید؛ به کلاس MainActivity.kt برگردید و دوباره متغیر binding را تعریف کنید و همانطور که خواهید دید، کلاس ActivityMainBinding دیگر ناشناخته نیست:
قدم های بعدی:
در متود onCreate نیز باید تغییراتی اعمال شود:
به :
تبدیل شود.
مثال ساده:
اگر دقت کرده باشید در لایه MainActivity دارای یک TextView می باشد! حال میخواهیم متن آن را تغییر دهیم:
در متود onCreate کلاس MainActivity کدی خواهیم نوشت که بعد از سه ثانیه متن helloWorldTextView را تغییر دهد:
ابتدا از کلاس Handler استفاده خواهیم کرد:
حالا با استفاده از کد زیر متن را تغییر می دهیم:
و در آخر کد ما به این صورت خواهید بود:
اگر توجه کرده باشید ما شئ helloWroldTextView را اصلأ تعریف نکرده بودیم! پس از کجا همچین متغییری وجود داشت؟ جواب ساده است! از کلاس ActivityMainBinding! هر عنصری از UI که داخل هر اکتیویتی ساخته می شود، در کلاس dataBinding مربوطه نیز تعریف خواهد شد بدون اینکه از متود درد آور findViewById استفاده شود!
مثال پیشرفته:
یک کلاس کاتلین به نام User بسازید به این صورت:
کلاس User حاوی مقداری به نام name می باشد و حالا قصد داریم که از این دیتاکلاس خود در برنامه استفاده کنیم.
ابتدا در activity_main.xml، یک تگ دیتا با نوع User تشکلیل بدهید به این صورت:
و حالا می خواهیم از مقدار name در کلاس User برای مقدار Text شئ helloWorldTextView استفاده کنیم! در helloWorldTextView مقدار Text را اینگونه تنظیم کنید:
و در آخر به این گونه خواهد بود:
حال دوباره به MainActivity.kt بر گردید و قبل از تغییر کد، ابتدا پروژه Make کنید تا دیتابایندینگ، شئ های جدید را شناسایی و تعریف کند!
حال به کدی که در مثال ساده نوشتیم دقت کنید:
حالا کد را به این صورت تغییر بدهید:
در اینجا، یک کلاس User ساخته شد و به مقدار user در binding نسبت داده شد اما برای ثبت تغییرات اعمال شده در binding، با دستور زیر تغییرات را اعمال خواهیم کرد: