Kotlin 硬编码字符串

Kotlin hardcoded String

我想使用 Android Studio Translations 编辑器为我的应用添加多语言支持。但它只支持 .xml 字符串。我在数据 class 中有一些字符串,我使用数据 class 来制作 ArrayList。我真的很想从 .xml 调用这些字符串,但我不知道如何调用。

我的数据class:

data class Infodc (
        val id: Int,
        val header: String,
        val image: Int,
        val infoOne: String,
        val infoTwo: String
)

我的清单

object Constants{
    fun getInfo(): ArrayList<Infodc>{
        val infoList = ArrayList<Infodc>()

        val inf1 = Infodc(
            1, "header_str", R.drawable.image0,
            "string_1", "string_2")
        infoList.add(inf1)
        return infoList
    }
}

我为 header = "header_str" 尝试了 R.string.string_header,但只显示 10 位数字,而不是字符串本身。

在那之后,我尝试了 getString 但我又失败了。

你可以这样做:

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

        val infodc = Infodc(
            1,
            R.string.header,
            R.drawable.ic_launcher_foreground,
            R.string.info_one,
            R.string.info_two,
            this
        )

        Log.d("MyTag", "$infodc") // D/MyTag: Infodc(id=1, header=Header, image=2131099744, infoOne=Info One, infoTwo=Info Two)


    }
}

data class Infodc(
    val id: Int,
    val header: String,
    val image: Int,
    val infoOne: String,
    val infoTwo: String
)
{
    constructor(
        id: Int,
        @StringRes header: Int,
        @DrawableRes image: Int,
        @StringRes infoOne: Int,
        @StringRes infoTwo: Int,
        context: Context
    ) : this(
        id,
        context.getString(header),
        image,
        context.getString(infoOne),
        context.getString(infoTwo)
    )
}

现在您可以将 String 和图像的 id 传递给构造函数,但作为 class 字段您将得到 String


另一种方法是让 class 只包含字符串的 id,然后当你想使用它时使用该字段的 getString