You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中如何通过字符串资源为ViewModel变量传值?

可行,但要注意ViewModel的使用规范

首先明确:可以实现字符串占位符的填充,但ViewModel本身不能直接持有普通Context(避免内存泄漏),所以得用合适的方式处理:

两种常用实现方式

方式一:UI层负责格式化(推荐,符合架构职责)

ViewModel只提供所需的资源ID和数值,把字符串格式化的操作交给Activity/Fragment(持有合法Context)来完成:

// ViewModel代码
class MathViewModel : ViewModel() {
    val questionType = R.string.add
    val num1 = 5
    val num2 = 3
}
// Activity/Fragment代码
val viewModel = ViewModelProvider(this)[MathViewModel::class.java]
val formattedQuestion = getString(viewModel.questionType, viewModel.num1, viewModel.num2)
// 得到结果:"5 + 3?"

方式二:通过AndroidViewModel获取全局Context

如果需要在ViewModel内部完成格式化,可以让ViewModel继承AndroidViewModel,它能安全获取全局的Application Context(不会造成内存泄漏):

// ViewModel代码
class MathViewModel(application: Application) : AndroidViewModel(application) {
    val questionType = R.string.add

    fun getFormattedQuestion(num1: Int, num2: Int): String {
        return getApplication<Application>().getString(questionType, num1, num2)
    }
}
// Activity/Fragment代码
val viewModel = ViewModelProvider(this)[MathViewModel::class.java]
val formattedQuestion = viewModel.getFormattedQuestion(5, 3)

注意事项

优先用方式一,因为ViewModel的核心职责是处理业务逻辑、提供数据,资源格式化属于UI层的展示相关操作,分离职责更利于维护和测试。

内容的提问来源于stack exchange,提问作者Pson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 15:39:37