今日もAndroidStudioでfragmentの勉強中です。Fragment間でのデータの受け渡しをする方法を調べているとViewModelを使えばできることがわかりました。andoroidデベロッパーには
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(名前解決できない)だけでなく「大文字小文字間違ってませんか」くらい言ってくれないかなと思うのは私だけ?
コメント