#1 ๊ฐ์
#1-1 Data Binding๊ณผ ViewModel
[Android] Data Binding - View์ ๊ฐ์ฒด ์ ๋ฌ
#1 ๊ฐ์ฒด ์ ๋ฌ์ ํ์์ฑ #1-1 ์ด์ ๊ธ Data Binding - ๊ธฐ์ด #1 ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ ์ฌ์ฉ ์ #1-1 ์์ ์ฑ ์๊ณผ ๊ฐ์ ๊ฐ๋จํ ์ฑ์ด ์๋ค. Button์ ๋๋ฅด๋ฉด, EditText์ text๊ฐ ๋ฐ๋ก ์์ ์๋ TextView์ text์ ๋์ ๋๋ค. ์ด
kenel.tistory.com
๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ์ด์ฉํด View์ ๊ฐ์ฒด๋ฅผ ๋ณด๋ผ ์ ์์๋ค. ๊ทธ๋ ๋ค๋ฉด, ViewModel์ ๊ฐ์ฒด ๋ํ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๋ณด๋ผ ์ ์์ ๊ฒ์ด๋ค.
#1-2 ViewModel์ด ์ฐ์ธ ์ํ ์ฑ
[Android] LiveData - ๊ธฐ์ด
#1 ๊ฐ์ #1-1 LiveData LiveData ๊ฐ์ | Android ๊ฐ๋ฐ์ | Android Developers LiveData๋ฅผ ์ฌ์ฉํ์ฌ ์๋ช ์ฃผ๊ธฐ๋ฅผ ์ธ์ํ๋ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค. developer.android.com LiveData. ๋ฌธ์์ ์ธ ์ ์๋ Data์ ๋ณ๊ฒฝ์ ๊ด
kenel.tistory.com
์ ๊ฒ์๊ธ์ ์์ฑ๋ ์ฑ์ ํ ๋๋ก ์ฝ๋๋ฅผ ์์ ํ๋ค.
#2 View์ ๊ฐ์ฒด(ViewModel) ์ ๋ฌ
#2-1 activity_main.xml์์ <variable> ํ๊ทธ ์ถ๊ฐ ๋ฐ ํ์ฉ
<?xml version="1.0" encoding="utf-8"?>
<layout ...>
<data>
<variable
name="myViewModel"
type="com.example.viewmodeltoview.MainActivityViewModel" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout ...>
<Button
android:id="@+id/countButton"
...
android:onClick="@{()->myViewModel.updateCount()}"
... />
...
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
๋ณธ ํ๋ก์ ํธ์์ ์ฌ์ฉํ <variable>์ ๋ฑ๋กํ๋ค. ์ด์ Activity๋ก๋ถํฐ ์ ๋ฌ๋ฐ์ MainActivityViewModel์ ์ฐธ์กฐํ ์ ์๊ฒ ๋์์ผ๋ฏ๋ก, MainActivityViewModel.updateCount() ๋ฉ์๋๋ฅผ View์์ ํธ์ถํ ์ ์๋ค. <Button>์ android:onClick ์์ฑ์ ๋ถ์ฌํ๊ณ , ๊ทธ ๊ฐ์๋ ํด๋น ๋ฉ์๋๋ฅผ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ ํํ์๊ณผ ๋๋ค ํํ์์ ํ์ฉํด ๋ฃ์ด์ค๋ค.
#2-2 MainActivity.kt์์ View์ ViewModel ์ ๋ฌํ๊ธฐ
...
class MainActivity : AppCompatActivity() {
...
override fun onCreate(savedInstanceState: Bundle?) {
...
binding.myViewModel = viewModel // activity_main.xml์ 'myViewModel'์ MainActivityViewModel์ ๊ฐ์ฒด 'viewModel' ๋ฃ๊ธฐ
viewModel.count.observe(this, Observer {
binding.countText.text = it.toString()
})
/*
binding.countButton.setOnClickListener {
viewModel.updateCount()
}
*/
}
}
๋จผ์ , View์์ ์ ์ํ๋ <variable>์ธ viewModel์ MainActivityViewModel์ ๊ฐ์ฒด๋ฅผ ์ ๋ฌํด์ผ ํ๋ค. ์ด๋ ๊ฒ ViewModel์ด ์ ๋ฌ๋ ์๊ฐ๋ถํฐ, ์๊น ID๊ฐ์ด "countButton"์ธ <Button>์ ์ ์ํ๋ android:onClick ์์ฑ์ด ์ ์์๋ํ๋ค. ๋ฐ๋ผ์, MainActivity์์ View ์์์ ํด๋ฆญ๋ฆฌ์ค๋๋ฅผ ํ ๋นํ๋ ์ฝ๋๋ ์ด์ ํ์๊ฐ ์๋ค. ํด๋น๋๋ ํ์์๋ ์ฝ๋๋ฅผ ์ฃผ์์ผ๋ก ๋ง๋ค์๋ค ์ ๊ฑฐํด๋ฒ๋ ธ๋ค. ์ถ๊ฐ๋ก, ์ฝ๋ ์ค viewModel.count.observe( ... )์ ์ ๊ฑฐ ๋ํ ๊ฐ๋ฅํ๋ค.
#3 ์์ฝ
View์์ ์ง์ View Model์ ์ฐธ์กฐํ ์ ์๊ฒ ๋ง๋ ๋ค.
#4 ์์ฑ๋ ์ฑ
android-practice/view-model/ViewModelToView at master ยท Kanmanemone/android-practice
Contribute to Kanmanemone/android-practice development by creating an account on GitHub.
github.com
'๊นจ์ ๊ฐ๋ ๐ > Android' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Android] LiveData - ์๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ 3๊ฐ์ง ๋ฐฉ๋ฒ (0) | 2024.01.20 |
---|---|
[Android] LiveData - ์์์ ์ผ๋ก '๊ด์ฐฐ'ํ๊ธฐ (0) | 2024.01.19 |
[Android] LiveData - ๊ธฐ์ด (0) | 2024.01.16 |
[Android] ViewModel - ๋ทฐ ๋ชจ๋ธ์ ์ธ์(Argument) ์ ๋ฌ (ViewModelFactory) (0) | 2024.01.15 |
[Android] ViewModel - ๊ธฐ์ด (0) | 2024.01.13 |