AndroidStudio今日の失敗(2020.12.05)

Android Studio

今日もAndroidStudioでfragmentの勉強中です。Fragment間でのデータの受け渡しをする方法を調べているとViewModelを使えばできることがわかりました。andoroidデベロッパーには

ViewModel の概要  |  Android デベロッパー  |  Android Developers
ViewModel を使用すると、ライフサイクルを意識した方法で UI のデータを管理できます。

ViewModelを継承したクラスを作ってそこにやり取りするデータを定義しておいて

    class SharedViewModel : ViewModel() {
        val selected = MutableLiveData<Item>()

        fun select(item: Item) {
            selected.value = item
        }
    }

Fragmetntのコードで

private val model: SharedViewModel by activityViewModels()

宣言すれば扱えるように書いていたのでさっそく

class MainViewModel : ViewModel() {
    var filename : String  = ""
}

クラスを作って、コードに

となり、ここからドツボに突入。

gradle(app)のimplementationしているライブラリをいろいろ変えてみたり、AndroidStudioの再起動したけれどダメであきらめかけていた時にandoroidデベロッパーのページをページトップに戻ってみるとActivity内のコードでは

val model: MyViewModel by viewModels()

だということに気が付き修正したら無事に動きました。そうです。FragmetntではなくActivityに書いていてエラーになっていたのです。やりたかったのは起動時にActivityでShared Preferenceから読込あとはFragment間で使いまわすことがしたかったのですが、参考にさせていただいたHPからandoroidデベロッパーへのリンクがFragmetntのところにリンクしていたのでそこだけ見ていました。

実は途中で色々なHPをみててActivityはviewModels()を使うのは見つけていたのですがactivityViewModels()だったのviewModels()に変えるのをactivityViewModels()からactivityだけ消してViewModels()にしていてエラーになっていたというのがオチでした。

Unresolved reference(名前解決できない)だけでなく「大文字小文字間違ってませんか」くらい言ってくれないかなと思うのは私だけ?

コメント

タイトルとURLをコピーしました