ViewModelProviders が非推奨になっている
公Android Developer 公式: ViewModelに書いてある
ViewModelProviders.of(this).get(UserModel.class)
をつかうと deprecated(非推奨) と表示されてしまう。
公式のViewModelProvidersの説明によるともうメンテナンスがされないらしい。
今後は ViewModelProvider
を使わないといけないらしいので今回はその使い方を紹介する。
#用意するファイル
Activity
プロジェクト開始時に通常通り生成されるもの
解説は省く
ViewModel
MVVM アーキテクチャで View と Model をつなぐもの。メリットとしては下記の2つが考えられる。
・画面回転時に View に持たせていたデータが消えるのを防ぐ
・疎結合にしてくれるので Activity が太るのを防ぐ
Factory
ViewModel を Activity で呼ぶ際に使うクラス。
Factory クラスでインスタンスの作り方を管理して、Activity でクラスを呼び出す際にで具体的な処理を行っている。
使い方
以下のコードの通りに使うことができます。
ViewModelに設定した文字が Activity から呼び出されるだけのコードです。
package com.example.viewmodel_fragment
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
class MainActivity : AppCompatActivity() {
lateinit var factory: MainViewModelFactory
lateinit var viewModel: MainViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
factory = MainViewModelFactory()
viewModel = ViewModelProvider(this, factory).get(MainViewModel::class.java)
viewModel.loadData()
viewModel.user.observe(this, Observer {
println(it)
})
}
}
package com.example.viewmodel_fragment
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
class MainViewModel : ViewModel(){
val user: MutableLiveData<String> = MutableLiveData()
fun loadData(){
user.postValue("higu")
}
}
package com.example.viewmodel_fragment
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
class MainViewModelFactory : ViewModelProvider.NewInstanceFactory(){
override fun <T : ViewModel?> create(modelClass: Class<T>):T {
return MainViewModel() as T
}
}
Factory に関して補足をすると T というのはジェネリクスといい、メソッドやクラスに型を
つけることができる機能です。