rokkonet

PC・Androidソフトウェア・アプリの開発・使い方に関するメモ

android開発 ViewModelインスタンスの取得は"by viewModels()"

2022 Aug. 13.

出典
by ViewModels() を使って ViewModel を取得する方法 | 穀風
Androidアプリ:ViewModel と LiveData + オブザーバ でUIとデータを管理(Kotlin編) – KOMMLOGG

"val hogeViewModel = ViewModelProvider(this).get(HogeViewModel::class.java)"でのViewModelインスタンス取得はdeprecatedとなった。
Activity/Fragment内で"val hogeViewModel: HogeViewModel by viewModels()"とする。

build.gradle(Module:app)
dependencies {
    implementation "androidx.fragment:fragment-ktx:1.5.2"
}

次が必要と書かれたサイトもあるが、書かなくても動作した

    implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1'
    implementation "androidx.activity:activity-ktx:1.5.1"


MainActivity.kt
class MainActivity : AppCompatActivity() {
    // ViewModelインスタンス生成
    private  val myViewModel: MyViewModel by viewModels()

    // オブザーバー作成
    val myStringObserver = Observer<String> { it ->  // "it ->"は省略可能
        binding.textView01.text = it
    }

    // myViewModel.myStringのオブザーブをセット
    myViewModel.myString.observe(this, myStringObserver)
}


MyViewModel.kt
class MyViewModel: ViewModel() {
    // String型LiveData変数を作成 
    val _myString = MutableLiveData<String>("")
    val myString: LiveData<String> get() = _myString
}