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
。
我想使用 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
。