상태(LifeCycle:안드로이드 생명주기)가 변경될 때마다 데이터를 관리해야하는데 UI 컨트롤러(Activity, Fragment)에서 모든 것을 다 하려고 하면 복잡해진다. -> ViewModel 을 사용하면 테스트나 관리가 용이하다.
onSaveInstanceState()를 사용해서 데이터를 관리할 수도 있지만 적절하지 않다.
MainViewModel.kt
// ViewModel에서 저렇게 아래와 같이 따랑 변수하나만 만들어서
// 사용하지는 않고 LiveData(등등)을 이용해서 함께 씀.
//아래는 예제일뿐.
class MainViewModel : ViewModel() {
var countValue = 0
init {
Log.d("MainViewModel", "init")
}
fun plus() {
countValue++
Log.d("MainViewModel", countValue.toString())
}
fun minus() {
countValue--
Log.d("MainViewModel", countValue.toString())
}
fun getCoutnValue(): Int {
return countValue
}
}
MainActivity.kt
class MainActivity : AppCompatActivity() {
lateinit var viewModel : MainViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
viewModel = ViewModelProvider(this).get(MainViewModel::class.java)
Log.d("MainActivity","onCreate")
val plusBtn : Button = findViewById(R.id.plus)
val minusBtn : Button = findViewById(R.id.minus)
val resultArea: TextView = findViewById(R.id.result)
resultArea.text = viewModel.countValue.toString()
plusBtn.setOnClickListener {
viewModel.plus()
resultArea.text = viewModel.countValue.toString()
}
minusBtn.setOnClickListener {
viewModel.minus()
resultArea.text = viewModel.countValue.toString()
}
}
}

Activity의 주기가 다시 돌아도 데이터가 유지된다.
'Android > ViewModel' 카테고리의 다른 글
ViewModelFactory (0) | 2022.11.21 |
---|---|
Activity/Fragment - ViewModel공유 (0) | 2022.11.21 |