在Kotlin类中如何正确获取R.string对应的字符串资源?
解决Kotlin Android开发中R.string资源返回整型不显示文本的问题
你遇到的问题根源是R.string.xxx本质是Android编译阶段生成的资源唯一标识整型,不是实际的字符串内容,直接赋值给TextInputLayout的error属性只会显示对应的数字,无法加载文本。
以下是两种常用场景的解决方案:
- 场景1:代码写在Activity/Fragment中
直接调用Android组件自带的getString()方法即可,系统会自动匹配当前设备语言加载对应字符串资源。
修改后的代码如下:
fun validateFields(storeBinding: FragmentEditStoreBinding): Boolean { var validate = true val inputName = storeBinding.etName.text.toString().trim() if (inputName.isEmpty()) { storeBinding.tilPhotoUrl.error = getString(R.string.helper_required) validate = false } return validate }
- 场景2:代码写在无Context的普通类中
你需要传入Context实例来调用getString方法,优先传入Application Context避免内存泄漏风险:
示例代码如下:
class StoreValidator(private val appContext: Context) { fun validateFields(storeBinding: FragmentEditStoreBinding): Boolean { var validate = true val inputName = storeBinding.etName.text.toString().trim() if (inputName.isEmpty()) { storeBinding.tilPhotoUrl.error = appContext.getString(R.string.helper_required) validate = false } return validate } }
补充说明:如果你的字符串资源带占位符,比如R.string.tip_count对应文本为「最多可输入%d个字符」,可以直接在getString方法里传入参数填充:getString(R.string.tip_count, 20)即可得到最终的拼接字符串。
内容的提问来源于stack exchange,提问作者user12755870
相关产品推荐
相关产品推荐

