如何使用我正在使用的代码调整我的功能以显示正确的值。这样可能吗?谢谢

How do I adjust my function to display the correct value using the code that I am using. Is it possible this way? Thanks

这个fun应该怎么调?当 运行 应用程序时,toast 不显示值,而是按原样显示。希望这是有道理的。例如:将显示“选项:@string/about_us”而不是实际值 覆盖乐趣 onOptionsItemSelected(item: MenuItem): Boolean {

        var selectedOption = ""

        when (item.itemId) {
            R.id.about_us -> selectedOption = "@string/about_us"
            R.id.help -> selectedOption = "@string/help"
            R.id.item_1 -> selectedOption = "@string/item_1"
            R.id.item_2 -> selectedOption = "@string/item_2"
            R.id.item_3 -> selectedOption = "@string/item_3"
        }

        val text = "Option:  $selectedOption"
        val toastiest = Toast.LENGTH_LONG
        Toast.makeText(this, text, toastiest).show()

        return super.onContextItemSelected(item)
    }

您需要使用 Context#getString(stringResId) 从您定义的字符串中获取适当的字符串(如果您使用的是翻译,这也会处理获取适当的语言版本)。你不能在这里使用 @string/item_1 语法,那是 XML 的东西 - 你需要使用 R.string.item_1

您已经有一个 Context(您在烤面包时正在使用它)所以我建议您这样做:

val selectedOption = when (item.itemId) {
    R.id.about_us -> R.string.about_us
    R.id.help -> R.string.help
    R.id.item_1 -> R.string.item_1
    R.id.item_2 -> R.string.item_2
    R.id.item_3 -> R.string.item_3
    else -> null
}?.let { getString(it) } ?: "fallback message goes here"

所以你将各种 ID 映射到它们的字符串资源 ID,然后你 运行 getString() 得到结果,所以你只需要写一次而不是每行重复它。

通过在没有匹配项时传递 null,并在 let 之前传递 null-checking,您可以设置后备字符串 - ID 匹配并转换为字符串,或者您在 ?: elvis 运算符之后获取该字符串。无论哪种方式,selectedOption 都会设置为某个值,因此您可以将其设置为 val,因为它是在当时和那里定义的