1
0

More than 3 years have passed since last update.

どこでもAndroidのリソースファイルを参照する方法

Last updated at Posted at 2020-03-23

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にする必要があるかどうか疑った方が良いかもしれません。

1
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0