728x90
메인 액티비티에서 viewmodel 생성
package com.anushka.viewmodeldemo2
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.databinding.DataBindingUtil
import androidx.lifecycle.ViewModelProvider
import com.anushka.viewmodeldemo2.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
private lateinit var viewModel: MainActivityViewModel
private lateinit var viewModelFactory: MainActivityViewModelFactory
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
// ViewModelFactory 사용하지않고 ViewModel 생성
viewModel = ViewModelProvider(this).get(MainActivityViewModel::class.java)
// ViewModelFactory 사용하고 ViewModel 생성
viewModelFactory = MainActivityViewModelFactory(125)
viewModel = ViewModelProvider(this,viewModelFactory).get(MainActivityViewModel::class.java)
binding.resultTextView.text = viewModel.getTotal().toString()
binding.insertButton.setOnClickListener {
viewModel.setTotal(binding.inputEditText.text.toString().toInt())
binding.resultTextView.text = viewModel.getTotal().toString()
}
}
}
ViewModelFactory
viewModel에서 생성자에 인자값 넣어줘야할시 사용
package com.anushka.viewmodeldemo2
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import java.lang.IllegalArgumentException
class MainActivityViewModelFactory(private val statingTotal : Int) : ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return super.create(modelClass)
if(modelClass.isAssignableFrom(MainActivityViewModel::class.java)){
return MainActivityViewModel(statingTotal) as T
}
throw IllegalArgumentException("Unknown View Model Class")
}
}
ViewModel
package com.anushka.viewmodeldemo2
import androidx.lifecycle.ViewModel
class MainActivityViewModel(startingTotal : Int) : ViewModel() {
private var total = 0
init {
total = startingTotal
}
fun getTotal():Int{
return total
}
fun setTotal(input:Int){
total +=input
}
}
fragment-ktx , activity-ktx 사용시 해당 방법으로 생성 가능
build.gradle
- implementation 'androidx.activity:activity-ktx:1.3.1'
- implementation 'androidx.activity:fragment-ktx:1.3.1'
- private val viewModel: MainActivityViewModel by viewModels()
- private val viewModel: MainActivityViewModel by activityViewModels()
728x90
'안드로이드 > ViewModel' 카테고리의 다른 글
viewmodel에서 R.string 처리하기 (0) | 2023.03.10 |
---|---|
MVVM패턴에서 ViewModel의 Event 전달하기 (0) | 2022.11.26 |