๋ฉด์ ๊ธฐ๋ก์ฉ Data Binding ์ ๋ฆฌ
Data Binding์ xml ํ์ผ์ data๋ฅผ ์ฐ๊ฒฐํด์ ์ฌ์ฉํ ์ ์๋๋ก ๋์์ฃผ๋ ๊ฒ์ผ๋ก MVVM ํจํด์ ๊ตฌํํ ๋ LiveData์ ํจ๊ป ๊ฑฐ์ ํ์์ ์ผ๋ก ์ฌ์ฉ๋จ. ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ์ฅ์ ์ ๊ธ๋ฃจ ์ฝ๋๋ฅผ ์ค์ผ ์ ์์. ๋ ์ด์์๊ณผ ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ฒฐํ๊ธฐ ์ํ ์ฝ๋๋ค์ ์ค์ผ ์ ์์.
๋ด๊ฐ ์ฌ์ฉํ๋ ๋ถ๋ถ
<?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="viewModel"
type="com.shootit.greme.viewmodel.MainViewModel" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.view.MainActivity">
// ...
<TextView
android:id="@+id/tvPageName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/BoldText"
android:text="@{viewModel.currentPage.text}"
// ...
/>
// ...
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
์ ์ฒด๋ฅผ <layout> ํ๊ทธ๋ก ๊ฐ์ธ์ฃผ๊ณ <data> </data> ํ๊ทธ ์ฌ์ด์ <variable> ํ๊ทธ๋ก ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ํ์ํ ๋ณ์๋ฅผ ์ ์ธํด์ค. ๋๋ viewmodel์ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ํ์ํ ๋ณ์๋ก ์ฌ์ฉํ ์์ ์ด์ด์ ๋ค์๊ณผ ๊ฐ์ด ํด์ค.
class MainActivity : BaseActivity<ActivityMainBinding>(R.layout.activity_main) {
override val viewModel by viewModels<MainViewModel> {
MainViewModel.MainViewModelFactory(/* ํ์ํ ์ ๋ณด */)
}
override fun initViewModel(viewModel: ViewModel) {
binding.lifecycleOwner = this@MainActivity
binding.viewModel = this.viewModel
}
// ...
}
๊ทธ๋ฆฌ๊ณ main activity ํด๋์ค์์ ๋ทฐ๋ชจ๋ธ ๋ง๋ค์ด์ฃผ๊ณ ์ด๋ฅผ xml ์์์ ์ ์ธํ๋ variable์ธ viewmodel์ ๋ฃ์ด์ค.
class MainViewModel(private val tmp: String): ViewModel() {
// ...
var currentPage = MutableLiveData<MainFragmentEnum>(MainFragmentEnum.HomeFragment)
}
ViewModel ํด๋์ค์์๋ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํจ. currentPage ๋ณ์์ ๊ฐ์ด ๋ฐ๋ ๋๋ง๋ค XML ์์์๋ ๋ฐ์์ด ๋จ.
XML์์ ์ฉ๋ฒ
๊ฐ ์์ฒด๋ฅผ ์ฌ์ฉํ ๋
android:text="@{๋ณ์๋ช
}"
๊ธฐ๋ณธ ๊ฐ ์ค์
android:text="@{๋ณ์๋ช
, default=๊ธฐ๋ณธ๊ฐ}"
ํจ์ ์ค์
android:onClick="@{() -> vm.ํจ์๋ช
()}"
์กฐ๊ฑด๋ฌธ ์ฌ์ฉ
// ์ผํญ ์ฐ์ฐ์ ์ฌ์ฉ
android:text="@{String.valueOf(๋ณ์ == null ? 0 : 1)}"
Binding Adapter
์ ์ผ์.
https://todaycode.tistory.com/53
Reference
https://velog.io/@jojo_devstory/Android-Databinding์-์์๋ณด์
https://velog.io/@changhee09/์๋๋ก์ด๋-Data-Binding
https://show-me-the-money.tistory.com/entry/Android-Data-Binding-๊ธฐ๋ณธ-ํ์ฉ๋ฒ-์ด์ ๋ฆฌ
'CS > Android, Kotlin' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Android] OKHttp3๋ฅผ ์ฌ์ฉํ ํค๋ ์ถ๊ฐ, Retrofit2๋ฅผ ์ฌ์ฉํ http ํต์ (0) | 2023.04.16 |
---|---|
[Android] Custom View (0) | 2023.04.15 |
[Android] MVVM (0) | 2023.04.13 |
[Android] ์๋๋ก์ด๋ ๋ฆฌ์์ค (0) | 2023.04.07 |
[Android] AOS ART, Garbage Collector ๋ฐฉ์ (0) | 2023.04.07 |