Kotlin硬编码字符串

问题描述

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

我的数据类:

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

我尝试将R.string.string_header的{​​{1}}用于header = "header_str",但只显示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和image的构造函数ID,但作为类字段,您将获得String


另一种方法是拥有一个仅包含字符串ID的类,然后在要使用它时使用该字段的getString