iOS・Android

【Kotlin】文字列結合したらワーニングが発生 Do not concatenate text displayed with `setText`

iOS・Android
この記事は約3分で読めます。

kotlinでは、以下のように文字列を結合することができるのですが、AndroidStudioや、InteliJ IDEAでこのような形で実装しようとすると「できればsetTextのテキストは連結してほしくないんよなぁ。。。」というワーニングが発生する。

val name = "遠藤"
textView.text = "私の名前は${name}"

textView.text = "私の名前は" + name

以下ワーニング

Do not concatenate text displayed with `setText`. Use resource string with placeholders.

こういう場合はstrings.xmlを使えば解消できます。

strings.xml

<resources>
    <string name="app_name">My Application</string>
    <string name="name">私の名前は、%1$sです。</string>
</resources>

MainActivity.kt

package com.example.myapplication

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.TextView

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val textView: TextView = findViewById(R.id.textView)

        // getStringでstrings.xmlで定義した値を取得
        val name = getString(R.string.name, "遠藤")
        textView.text = name

    }
}

こうすることでstringsファイルで定義した「%1$s」の部分がgetStringの第2引数の値になり、ワーニングも消えます。

基本的にはハードコードが非推奨なので、とりあえず文字列はstrings.xmlに定義しておいて使うでよさそう。

参考:https://developer.android.com/guide/topics/resources/string-resource