Data Binding + Livedata แบบมือใหม่

(YO)Yothin
te<h @TDG
Published in
2 min readFeb 18, 2020
https://giphy.com/

สวัสดีครับผมเชื่อว่าเพื่อนๆน่าจะคุ้นกับ Data Binding กันบ้างแล้วหรือ อาจผ่านๆหูมาบ้าง แต่ถ้าใครยังนึกไม่ออกมาลองดูบทความนี้กันเลย

อันดับแรกเปิดใช้ DataBinding เพราะถ้าไม่เปิดก็ใช้ไม่ได้ใช่ไหม 555 ไปที่ ไฟล์ build.gradle แล้วทำตามนี้เลยครับผม

วิธีเปิดใช้ศึกษาเพิ่มเติมใน Documentation https://developer.android.com/topic/libraries/data-binding/start#build_environment

แต่เดี๋ยวก่อนฮะยังไม่เสร็จ…จะเห็นว่าเจ้า Android studio ได้แจ้งเตือน warning ในส่วนที่เราพึ่งเพิ่มกันไป

android studio บอกว่าถ้าใช้ kotlin ต้อง apply kotlin-kapt plugin ด้วยนะ

ทีนี้เราก็เพิ่ม apply kotlin-plugin กันที่เดิม ไฟล์เดิมเลยย

เป็นอันเสร็จสิ้นในการติดตั้ง DataBinding เห็นไหมว่ามันง่ายเหมือนกดปุ่ม

https://giphy.com/

มาลงมือทำกันดีกว่า

เริ่มกันที่ 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 กัน

DataBinding นั้นช่วยให้โค้ดในส่วนของ View ลดลงเยอะมาก

จากรูปอาจสงสัยว่า เอ๊ะ !! 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 ถ้าผิดพลาดประการใดติชมได้เลยครับผม”

Reference

--

--