Data Binding + Livedata แบบมือใหม่
สวัสดีครับผมเชื่อว่าเพื่อนๆน่าจะคุ้นกับ Data Binding กันบ้างแล้วหรือ อาจผ่านๆหูมาบ้าง แต่ถ้าใครยังนึกไม่ออกมาลองดูบทความนี้กันเลย
อันดับแรกเปิดใช้ DataBinding เพราะถ้าไม่เปิดก็ใช้ไม่ได้ใช่ไหม 555 ไปที่ ไฟล์ build.gradle แล้วทำตามนี้เลยครับผม
แต่เดี๋ยวก่อนฮะยังไม่เสร็จ…จะเห็นว่าเจ้า Android studio ได้แจ้งเตือน warning ในส่วนที่เราพึ่งเพิ่มกันไป
ทีนี้เราก็เพิ่ม apply kotlin-plugin กันที่เดิม ไฟล์เดิมเลยย
เป็นอันเสร็จสิ้นในการติดตั้ง DataBinding เห็นไหมว่ามันง่ายเหมือนกดปุ่ม
มาลงมือทำกันดีกว่า
เริ่มกันที่ xml ครับ ถ้าเราต้องการจะใช้ DataBinding เราต้องประกาศ <layout></layout> เพื่อให้ DataBinding สร้าง class เฉพาะ xml นั้นขึ้นมา (ตามรูป)
จะเห็นมีอะไร ๆ เยอะแยะไปหมด มา!เรามาเข้าใจกันทีละตัวกัน (อันนี้ตามความเข้าใจของผมนะครับ)
- layout ก็อย่างที่บอกไปข้างต้นว่า เมื่อประกาศ layout แล้ว android studio จะสร้าง class สำหรับ xml นั้นมา
- data จะมี element อยู่ คือ variable และ import
- import เป็น element เรียก library มาใช้ใน XML
- variable เป็น element ไว้สร้างตัวแปร จะเห็นว่ามันมี element name และ element type ก็ตรงตัวเลยครับ element name คือชื่อตัวแปรที่เราจะตั้ง element type คือประเภทของตัวแปรนั้นเอง
มาต่อกันน สร้าง class ViewModel ขึ้นมา จะสร้างไว้สำหรับนับเลขถอยหลัง
ทีนี้ก็ประกาศตัวแปร ViewModel ใน xml เพื่อรับ Data มาแสดงผล
ตรง TextView จะเห็น android:text=”@{viewmodel.onTimeFinished()}” คือการนำData ของ livedata มาแสดง โดยใช้ Expression language ซึ่งสามารถศึกษาเพิ่มเติมได้ https://developer.android.com/topic/libraries/data-binding/expressions#expression_language
เรามาประกาศ Data Binding ใน class Activity กัน
จากรูปอาจสงสัยว่า เอ๊ะ !! ActicityMainBinding มาได้ไง? ยังไม่ได้สร้างเลยนะ… คำตอบคือ เป็นเพราะว่า <layout></layout> ใน XML นั้นเอง มันจะสร้าง class Bingding มาให้โดยชื่อ Class จะถูกตั้งตาม XML และต่อท้ายด้วยBinding
ตัวอย่างเช่น ถ้า XML เราชื่อ activity_second เจ้า Android Studio ที่สร้างก็เป็นชื่อ class ActivitySecondBinding activity_second.xml -> class ActivitySecondBinding
ทีนี้เรามาดูผลลัพท์กัน
“ถ้ายังไม่เข้าใจลองเข้าไปดูใน Github เพิ่มเติมหรือ สอบถาม Comment มาได้เลยครับผม”
“สุดท้ายนี้ในBlog นี้เพียงส่วนหนึ่งของเรื่อง DataBinding ถ้าผิดพลาดประการใดติชมได้เลยครับผม”