Androidのリソースファイルが参照できない
Androidのアプリ開発をしていて、変数に文字列を入れる時、なるべくリソースファイルを参照した方が良いと思うけれどもgetStringメソッドが使えたり使えなかったり、
リソースファイルのように@string/textなど色々試してみるけれども、参照できないと思ったことが多かったのでメモ。
いつリソースがファイルが参照できていないのか
「getStringが使えたり使えなかったりするけれども、いつ使えていつ使えないのか?」と思い試してみたところ、
-
ActivityやFragmentではgetStringメソッドを使える。
-
ViewModelファイルやActivityやFragment内でもcompanion object内だと参照出来ない
ということが分かりました。Fragmentファイルでも大体companion object内こそリソース参照したいことが多いのに困りました。
解決法
解決策として、これで良いのかは分かりませんが、
- ViewModelの場合
ViewModel内からだと、以下を使って参照しました。
context.resources.getString(R.string.sample)
contextはViewModelのメソッドを呼び出すfragment側から、contextを渡しました。
- companion object内の場合
普段、Koin設定したりしているSampleApplicationファイル内で、
companion object {
lateinit var context: Context
}
override fun onCreate() {
super.onCreate()
context = this
}
とした上で、ActivityやFragmentのcompanion object内で
SampleApplication.context.getString(R.string.sample)
と、しました。
特にViewModelの方はcontextをメソッドで渡すという点が、スッキリしない気がします。
追記
場合にもよると思いますが、activityやFragementのcompanion object内でリソースファイルを参照している場合、そもそもcompanion objectにする必要があるかどうか疑った方が良いかもしれません。