상태(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

+ Recent posts