Databinding์ ์ฌ์ฉ ํ๊ณ ์์ด! ๋ ์ด๋ค ๋ฐฉ์์ผ๋ก ์ฐ๋์ง ์๊ฒ ์ด.
๊ทผ๋ฐ ์๋ฒ์์ ๋ฐ์์จ ๋ฐ์ดํฐ๋ค์ ์ด๋ป๊ฒ ๊ฐ๊ณตํด์ ๋ฐ๋ก ์จ?
์๊ฐ์ด๋ ํ์ ๋ญ ํ๋ฌผ๋ฉฐ ์ฌ์ฉ์ ์ฑ๋ณ์ด๋ผ๋ ๊ฐ๊ณตํด์ ๋ณด์ฌ์ค์ผํ๋๊ฑฐ ์๋๊ฐ?
๊ทธ๋ผ ๋ ๋ค๋ฅธ ๊ณณ์์ ์ฃผ์ ํด์ค์ผํ๋๊ฑฐ ์๋์ผ?
๋ผ๊ณ ์๊ฐํ์ง๋ง… ์~์ฃผ ์ข์ ๊ธฐ๋ฅ์ด ์๋ค.(์ด๋ฌ๋ฉด ๋ท๋ง์ด ๊ถ๊ธํด์ ๋ฒ์ด๋๊ธฐ ํ๋ค๋ค ๐คฆโ๏ธ)
1. ์ผ๋จ ์ฌ์ฉํ Data class๋ฅผ ๋ง๋ ๋ค.
data class Memo(
// @SerializedName("id") <- ์๋ฒ์์ ์ด ์ด๋ฆ์ผ๋ก ๋ฐ์์ค๊ฒํ๊ณ
// ์ฌ์ฉํ ๋์๋ ์๋์ ์ ํ ๋ณ์๋ช
์ผ๋ก ์ฌ์ฉํ๋ค.
โ
// @Expose => object ์ค ํด๋น ๊ฐ์ด null ๊ฒฝ์ฐ
// -> json ์ผ๋ก ๋ง๋ค ํ๋๋ฅผ ์๋ ์๋ต
@SerializedName("id")
@Expose val id: Int,
โ
@SerializedName("title")
@Expose val memoTitle: String,
โ
@SerializedName("content")
@Expose val memoContent: String,
)
2. BaseObserverable์ ์์๋ฐ๋๋ค.
data class Memo(
...
@SerializedName("content")
@Expose val memoContent: String,
): BaseObservable() {
โ
}
3. ์์์ ๊ฐ๊ณตํ ์ฝ๋๋ฅผ ์ ๋๋ค.
data class Memo(
@SerializedName("id")
@Expose val id: Int,
โ
@SerializedName("title")
@Expose val memoTitle: String,
โ
@SerializedName("content")
@Expose val _memoContent: String, // (1)
): BaseObservable() {
@get:Bindable
val memoContent: String // (2)
get() {
val memo = "๋ฉ๋ชจ ์์ธ๋ด์ฉ : ${_memoContent}"
return memo
}
}
์์ (1) ์ ๋ณด๋ฉด ์๋ ์ฌ์ฉํ๋ memoContent ๋ณ์๋ช ์์ _๊ฐ ๋ถ์ด์๋๊ฑธ ๋ณผ ์ ์๋ค.
(2)์์ ๋๊ฐ์ ๋ณ์๋ช ์ ์ฐ๊ณ ์๋๋ฐ ์ด์ ๋ ๋ด๊ฐ ์ค์ ๋ก ์ฌ์ฉํ ๋ ๊ฐ๊ณตํ ๋ฐ์ดํฐ๋ง ๋ถ๋ฌ์ค๊ณ ์ถ๋ค๋ฉด _๋ฅผ ๋ถ์ด๊ณ ๊ตฌ๋ถ์ ํ๊ธฐ ์ํด์ ๋ณ์๋ช ์ ๋๊ฐ์ง๋ง _๋ฅผ ๋ถ์ฌ์ฃผ๋ ๊ฒ์ผ๋ก ์ค์ ํ๋ค.
4. ์ด์ ์ค์ ๋ก ์ฌ์ฉํ๋ฉด ๋๋ค.
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
โ
<data>
<variable
name="item"
type="com.example.project.models.Memo" />
</data>
โ
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
โ
<TextView
android:id="@+id/tv_memo"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:fontFamily="@font/noto_medium"
android:text="@{item.memoContent}"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
...
์ด๋ ๊ฒ ํธ์ถํ๋ฉด
_memoContent์ ๊ฐ์ -> "๋ฉ์๋ชจ์ค". ๋ผ๋ฉด
memoContent์ ๊ฐ์ -> "๋ฉ๋ชจ ์์ธ๋ด์ฉ : ๋ฉ์๋ชจ์ค" ๊ฐ ๋ ๊ฒ์ด๋ค.
๋์
์์์๋ ๊ฐ๋จํ String ์์ ์ ํ์ง๋ง ์๊ฐ ๊ด๋ฆฌ ํ์๋ผ๋์ง Model๊ฐ ์ ๊ธฐ์ ์ธ ์์ ์ด ํ์ํ ๊ฒฝ์ฐ
Data class ์์ BaseObserverable ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณตํด xml์์ ๊ฐ๋จํ๊ฒ ํธ์ถ์ด ๊ฐ๋ฅํ๊ฒ ๊ตฌํ์ด ๊ฐ๋ฅํ๋ค.
์ ๋ง ํธํ๊ณ ๊น๋ํด์ง๋ ์ฝ๋๋ฅผ ๋ณด๋ ๊ธฐ๋ถ์ด ๋ํ ๊ฒ ์์ด ์ข๋ค. ํํํํซ
'Development > Android' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Thread์ ๊ดํ์ฌ ๋ง ์ ์ด๋ณด๊ธฐ (0) | 2023.04.11 |
---|---|
๐ ย ์ฌ์ฉ์๋ค์ด ์ฑ์ ์ ์ ๋ชป ์ฐ๊ฒ ํ ์ ์๋? - Firebase Remote Config (0) | 2022.09.18 |
๐ฆย Databinding์ ์ฐ๋ฉด์ - 2 (0) | 2022.09.08 |
๐ฆย Databinding์ ์ฐ๋ฉด์ - 1 (0) | 2022.09.08 |
์์กด์ฑ ์ฃผ์ ์ Koin๐ชย ๋ ๋ข์ - 2 (0) | 2022.09.08 |