1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【AndroidStudio】ActivityやFragment外でgetStringを使いたい

Last updated at Posted at 2023-05-10

はじめに

TextView等のtextに「合計:1000円」や「合計:2000円」など、文字列の特定の数値だけを変えて表示したいときにはstrings.mxlに文字列リソースを用意してから、getStringで代入するというやり方をする。
しかし、困ったことにgetStringはActiviyやFragment外では使えない。今回はActiviyやFragment外でgetStringを使う方法についてまとめる。

instanceの設定

プロジェクトに存在するActivityで以下のように宣言する。

MainActivity.kt
class MainActivity : AppCompatActivity() {

+    companion object {
+        lateinit var instance: MainActivity
+            private set
+    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

+        instance = this

        // 関係ない部分は省略

    }

}

getStringの利用

今回私はListAdapterの中で使いたかったので、その時の例を示す。

CustomAdapter.kt
class CustomAdapter(
    private val itemClickListener: OnItemClickListener
): ListAdapter<Item, ViewHolder>(DiffCallback) {

+    private val context = MainActivity.instance.applicationContext
+    private val resources = context.resources

// 省略

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {

+        holder.itemName.text = resources.getString(R.string.item_name, item.itemName)

    }

// 省略

}

この時strings.xmlには以下のように文字列が入っている。

<resources>
    <string name="item_name">合計: %d 円</string>
</resources>

このようにすることで、getStringを利用している。
今回の場合、任意の金額を設定してtextに表示したいため、「合計: %d 円」となっている。
そのため、resources.getString(R.string.item_name, item.itemName)item.itemNameが1000の場合は「合計: 1000 円」に、2000の場合は「合計: 2000 円」となる。

まとめ

今回はgetStringをActivityやFragment外で使って文字列を表示する方法をまとめた。
このやり方が違っていたり、もっといいやり方があるという場合はぜひ教えてください。

追記

コメントで上記やり方でなくてもgetStringが使える方法を教えてもらった。

CustomAdapter.kt
class CustomAdapter(
    private val itemClickListener: OnItemClickListener
): ListAdapter<Item, ViewHolder>(DiffCallback) {

// 省略

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {

+        holder.itemName.text = holder.itemName.context.getString(R.string.item_name, item.itemName)

    }

// 省略

}

ViewからContextやResourcesを取得できるため、この書き方をするだけでも良かった。

1
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?