Intro to Data Binding

Google I/O 2015 မှာ Android M ထွက်လာတာနဲ့အတူ တခြား Android Development နဲ့ Android Development Tools တွေ အတွက် Features အသစ်တွေ Library အသစ်တွေနဲ့ Tools အသစ်တွေပါ ထွက်ရှိလာပါတယ်။

အဲဒီထဲကနေမှ Android Tools Team ရဲ့ library အသစ်တစ်ခုဖြစ်တဲ့ Data Binding အကြောင်းကို ဥပမာ project တစ်ခုနဲ့ ဖော်ပြသွားမှာ ဖြစ်ပါတယ်။

Data Binding ဟာ အသစ်အဆန်း နည်းပညာ တစ်ခုတော့ မဟုတ်ပါဘူး။ Android မဟုတ်တဲ့ တခြား SDK/Framework/Library တွေမှာ တွင်ကျယ်စွာ အသုံးပြုနေတဲ့ process တစ်ခုဖြစ်ပါတယ်။ ခုနောက်ပိုင်းမှာဆိုရင် Angular.js, Backbone.js စတဲ့ Javascript library များမှာ Data Binding ကို တွင်တွင်ကျယ်ကျယ်သုံးနေတာကိုလည်း သတိပြုမိမှာပါ။

Android မှာလည်း တခြား third party implementation တွေရှိပေမဲ့ အခုမှ Official Android Tools Team က implement လုပ်တာဖြစ်ပါတယ်။

တခြား သတိပြုရမယ့်အချက်ကတော့ Data Binding ဟာ support library တစ်ခုအနေနဲ့ လာတဲ့ဖြစ်တဲ့အတွက် Android 2.1 (API level 7+) ထိ Support ပေးပါတယ်။

ပထမဆုံး Android Project တစ်ခုကို Android Studio မှာ စပြီး Create လုပ်ပါ။ ( Eclipse/ADT သုံးနေသူတွေအနေနဲ့ Android Studio ကို ပြောင်းသုံးဖို့ အချိန်တန်နေပါပြီလို့လည်း ပြောချင်ပါတယ်)

Project Name, Company Domain နဲ့ Project location ကို မိမိစိတ်ကြိုက်အမည်ပေးလို့ရပါတယ်။

ပြီးရင် Blank Activity တစ်ခုနဲ့ စပါမယ်။

Data Binding library ကို အသုံးပြုရန်အတွက် android-gradle plugin version 1.3.0-beta1 အထက်နဲ့ gradle version 2.4 ရှိရန် လိုအပ်ပါတယ်။

Gradle version ကို ပြောင်းလဲရန် gradle > wrapper > gradle-wrapper.properties က distributionUrl ကို အခုလို ပြောင်းလဲဖို့လိုပါတယ်။

distributionUrl=https\://services.gradle.org/distributions/gradle-2.4-all.zip

ပြီးရင် Project ရဲ့ top-level build.gradle မှာ အခုလို set up လုပ်ပါတယ်။

app ရဲ့ build.gradle မှာ အခုလို ထပ်ပြီး set up လုပ်ပါတယ်။

ပြီးရင်​တော့ Gradle Sync လုပ်ပါတယ်။

Build success ဖြစ်သွားပြီးရင် app ကို ပုံမှန်နည်းအားဖြင့် စပြီး develop လုပ်ပါမယ်။

name, age နဲ့ address attribute များပါဝင်တဲ့ User ဆိုတဲ့ Object တစ်ခုကို create လုပ်ပါတယ်။

နောက် activity_main.xml Layout ကို ယခုလို ပြင်ပါတယ်။

(ဒီနေရာမှာ နည်းနည်း ပြောချင်တာက tools:text="John" ဆိုတဲ့ line ပါ။ Android Tools မှာ Tools Attribute ဆိုတာ ရှိပါတယ်။ XML namespace တစ်ခု အနေနဲ့ အသုံးဝင်တဲ့ information တွေကို XML layout ထဲမှာပဲ သိမ်းထားလို့ရပါတယ်။ အဲထဲကမှ tools:text ဆိုတဲ့ namespace က Designtime layout attribute ထဲက တစ်ခုပါ။ android:text နဲ့ ကွာခြားချက်ကတော့ tools:text ဟာ Android Studio tool ထဲမှာပဲ text ကို render လုပ်တာဖြစ်ပြီး android:text လို runtime မှာပါ render လုပ်တာမဟုတ်ပါဘူး။ UI/Layout development လုပ်နေစဉ်မှာ အသုံးဝင်ပါတယ်။)

Layout မှာ လိုအပ်တဲ့ widget တွေထည့်ပြီးသွားရင် MainActivity.java မှာ Widget Id တွေနဲ့ TextView တွေကို map လုပ်ပေးပါတယ်။

User Object တစ်ခု create လုပ်ပါတယ်။

User ရဲ့ attributes တွေကို TextView တွေမှာ setText() လုပ်ပေးပါတယ်။

Run ကြည့်ရင်တော့ အခုလို မြင်ရမှာ ဖြစ်ပါတယ်။

Data Binding စလုပ်ကြည့်ရအောင်ပါ။

အရင်ဆုံး activity_main.xml ကို စပြီး အခုလို ပြင်ပါမယ်။

ပထမဆုံးတွေ့ရမှာ layout tag ဖြစ်ပါတယ်။ layout ဆိုတာ root tag တစ်ခုဖြစ်ပြီး သူ့မှာ data နဲ့ view ဆိုပြီး နှစ်ပိုင်းရှိပါတယ်။

ကိုယ် bind ချင်တဲ့ variable ကို data tag ထဲမှာ name နဲ့ typeကို declare လုပ်ရပါတယ်။ ဒီ app မှာတော့ name ကို user လို့ပဲ ပေးထားပြီး type ကို အပ​ေါ်မှာ create လုပ်ခဲ့တဲ့ User object နဲ့ full package path ကို ထည့်ပါတယ်။

view အပိုင်းကတော့ ကိုယ့် app ရဲ့ တခြား layout တွေပဲ ဖြစ်ပါတယ်။ အဲဒီမှာ အရေးကြီးတာက @{} နဲ့စတဲ့နေရာဖြစ်ပါတယ်။ ကိုယ် bind လုပ်ချင်တဲ့ Object attribute ကို define လုပ်ပေးရတာဖြစ်ပါတယ်။ ဒီ Expression Language မှာ တခြား advanced features တွေပါဝင်ပါသေးတယ်။ နောက်ဆက်တွဲ အပိုင်းတွေမှာ အဆင်ပြေသလို ဖော်ပြပေးသွားမှာပါ။

ပြီးရင်တော့ MainActivity.java ကို ပြန်သွားပြီး အခုလို Bind ပေးရမှာ ဖြစ်ပါတယ်။

ActivityMainBinding ဆိုတဲ့ class ဟာ generated လုပ်ပေးထားတဲ့ class ဖြစ်ပါတယ်။ ActivityMainBinding ဆိုတဲ့ name ကတော့ layout အမည် activity_main ကို PascalCase ဖြစ်တဲ့ ActivityName ကိုပြောင်းပြီး Binding ကို suffix အနေနဲ့ ကပ်ထားတာဖြစ်ပါတယ်။ အဲဒီ class မှာ layout မှာ bind လုပ်ခဲ့တဲ့ User ရဲ့ properties အကုန်လုံးကို generate လုပ်ထားပြီးသား ဖြစ်ပါတယ်။

Run ကြည့်ရင်တော့ အခုလိုမြင်ရမှာ ဖြစ်ပါတယ်။

ဒါဟာ အင်မတန် ရိုးရှင်းတဲ့ UI နဲ့ Data bind ထားတာဖြစ်ပါတယ်။ နောက်များမှာ အလျင်းသင့်သလို ပိုမို ရှုပ်ထွေးတဲ့ Binding method များကို ရေးသွားမှာဖြစ်ပါတယ်။

အထက်ပါ project ကို GitHub [Download zip] မှာ ရယူနိုင်ပါတယ်။ မေးမြန်းလိုသည်များကိုလည်း MMAUG Facebook Group မှာ မေးမြန်းနိုင်ပါတယ်။