DataBinding

์ฑ„ํ˜„ยท2023๋…„ 5์›” 25์ผ
0

์•ˆ๋“œ๋กœ์ด๋“œ

๋ชฉ๋ก ๋ณด๊ธฐ
27/37

๐Ÿšจ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์—์„œ๋Š” ๋ทฐ๋ฐ”์ธ๋”ฉ๊ณผ ๋‹ค๋ฅด๊ฒŒ ๋ ˆ์ด์•„์›ƒ xml ํŒŒ์ผ์˜ ์ตœ์ƒ์œ„ ์š”์†Œ์ธ root๊ฐ€ <layout>์ด์–ด์•ผ๋งŒ ๋ฐ”์ธ๋”ฉ ํด๋ž˜์Šค๊ฐ€ ๋งŒ๋“ค์–ด์ง
์ด๋•Œ, <layout>์€ view๊ฐ€ ์•„๋‹Œ ๊ฐ์ฒด

<layout>์€ ๋‘ ๊ฐ€์ง€ ์˜์—ญ์œผ๋กœ ๋‚˜๋‰จ
โ“ <data> ์—์„œ๋Š” ๋ ˆ์ด์•„์›ƒ๋ทฐ์™€ ๋ฐ”์ธ๋”ฉ์„ ํ•  ๋ฐ์ดํ„ฐ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋Š” ์˜์—ญ
โ“‘ Layout View Viewgroup, ํ™”๋ฉด์— ๋ณด์—ฌ์งˆ ๋ทฐ๊ฐ€ ๋†“์ผ ์ž๋ฆฌ

TextView์—๋Š” Intํ˜• ๊ฐ’์„ ์ค„ ์ˆ˜๊ฐ€ ์—†์Œ,
String.valueOf()์ด์šฉํ•˜์—ฌ ์ž๋ฃŒํ˜• ๋ณ€ํ™˜

๊ธฐ์กด์— ๋ฒ„ํŠผ์ด ๋ˆŒ๋ฆฌ๋Š”์ง€ ์ฒดํฌํ•˜๋Š” ๋ฆฌ์Šค๋„ˆ๋ฅผ ๋‹ฌ์•„์„œ ๋ฒ„ํŠผ์ด ๋ˆŒ๋ฆฌ๋ฉด ๋ณด์—ฌ์ฃผ๋Š” ๊ฐ’์„ ๋ฐ”๊ฟจ์ง€๋งŒ, ๋ฒ„ํŠผ ํด๋ฆญ์— ๋ฐ”๋กœ ๋ฐ˜์‘ํ•˜์—ฌ ๋ณ€์ˆ˜์ž์ฒด๋ฅผ ๋ณ€๊ฒฝ

but, ๋ณ€์ˆ˜๊ฐ€ ๋ฐ”๋€”๋•Œ๋งˆ๋‹ค ํ™”๋ฉด์„ ๊ฐฑ์‹ ํ•  ์ˆ˜๋Š” ์—†์œผ๋ฏ€๋กœ ๊ฐ’๋ณ€๊ฒฝ์ด ๊ด€์ฐฐ๋˜๋Š” ๋ฉค๋ฒ„๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด ์‚ฌ์šฉ ObservableXXX

var age: ObservableInt= ObservableInt(0)

Observable๊ฐ์ฒด๋Š” โ‘  primitive type โ‘ก List or Map โ‘ข Reference type --> ObservableField<> ํ˜•ํƒœ๋กœ ์‚ฌ์šฉ๊ฐ€๋Šฅ
๋”ฐ๋ผ์„œ String์˜ ๊ฒฝ์šฐ ๊ธฐ๋ณธํ˜•์ด ์•„๋‹ˆ๋ฏ€๋กœ ObservableField<String>์œผ๋กœ ์‚ฌ์šฉ

xml์— ์žˆ๋Š” ๋ฒ„ํŠผ์˜ ํด๋ฆญ์ด๋ฒคํŠธ์— ๋ฐ˜์‘ํ•˜๊ธฐ์œ„ํ•˜์—ฌ ๋ฐ์ดํ„ฐ ํด๋ž˜์Šค์— ๋ฉ”์†Œ๋“œ ์ž‘์„ฑ
โ“ callback method๋กœ ์ž‘์„ฑ
ํด๋ฆญ์˜ ์ฝœ๋ฐฑ ๋ฉ”์†Œ๋“œ๊ฐ€ ๋˜๋ ค๋ฉด ๋ฐ˜๋“œ์‹œ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์žˆ์–ด์•ผ ํ•จ

fun changeName(view:View) {
        name.set("Robin")
    }

โ“‘ ์ผ๋ฐ˜ ๋ฉ”์†Œ๋“œ๋กœ ์ž‘์„ฑํ•˜๊ณ  xml์—์„œ ์ต๋ช… ์ฝœ๋ฐฑํ•จ์ˆ˜๋กœ ํ˜ธ์ถœ

fun toggleFavor() {
        favor.set(!favor.get())
    }
<Button
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:onClick="@{(v)->user.toggleFavor()}"/>

xml์˜ onClick ์•ˆ์—์„œ ํ•จ์ˆ˜ function์€ ๋งŒ๋“ค ์ˆ˜ ์—†์ง€๋งŒ, ๋žŒ๋‹ค์‹์€ ๊ฐ€๋Šฅ
์ด๋ฅผ ์ด์šฉํ•˜์—ฌ ์ต๋ช…์˜ ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด ๋ฐ์ดํ„ฐ ํด๋ž˜์Šค์˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ

0๊ฐœ์˜ ๋Œ“๊ธ€