在viewmodel中获取字符串资源
Get string resources in viewmodel
我需要在 TextView 中以百分比形式显示值,例如“15 %”
我通过这种方式在 viewModel 中完成它并且它有效:
perfusionIndexValue.postValue(
list.lastOrNull()?.perfusionIndex?.takeIf {
it != PerfusionIndex.NO_DATA
}?.value?.toString().orEmpty() + " %"
)
但如果我用资源来做:
perfusionIndexValue.postValue(
list.lastOrNull()?.perfusionIndex?.takeIf {
it != PerfusionIndex.NO_DATA
}?.value?.toString().orEmpty() + Resources.getSystem().getString(R.string.pi_percent)
)
我明白了
io.reactivex.rxjava3.exceptions.UndeliverableException: The exception could not be delivered to the consumer because it has already canceled/disposed the flow or the exception has nowhere to go to begin with. Further reading: https://github.com/ReactiveX/RxJava/wiki/What's-different-in-2.0#error-handling | android.content.res.Resources$NotFoundException: String resource ID #0x7f0e0081
我如何设置像“15 %”这样的文本
使用以下命令从视图模型中的资源中获取字符串 -
String s = getApplication().getString(R.string.pi_percent);
在你的情况下,我看到你需要这里的上下文。
但是,不应将片段的上下文或 Activity 传递到 ViewModel。仅使用 Application Context 获取资源,...或与 ViewModel 中的 Application 相关的内容。
在这里,如果您没有使用 Hilt(或 Dagger),那么您应该将 ViewModel()
替换为 AndroidViewModel(application)
,如下所示:
class MyViewModel(application: Application): AndroidViewModel(application) {
...
}
如果使用 Hilt,您可以像下面这样通过 @ApplicationContext
注释注入应用程序上下文,而无需扩展 AndroidViewModel()
:
@HiltViewModel
class MyViewModel @Inject constructor(
@ApplicationContext private val context: Context
): ViewModel() {
}
Here I note when using Hilt to inject Application Context into the ViewModel. You will see a warning about memory leak when injecting the Application Context into the ViewModel. This is a warning in the recent Hilt version, but I have tested Profiler and there is no leak.
并且您可以通过调用以下方式在 ViewModel 中获取资源作为字符串资源:
val myText = context.getString(R.string.your_string_id)
我需要在 TextView 中以百分比形式显示值,例如“15 %” 我通过这种方式在 viewModel 中完成它并且它有效:
perfusionIndexValue.postValue(
list.lastOrNull()?.perfusionIndex?.takeIf {
it != PerfusionIndex.NO_DATA
}?.value?.toString().orEmpty() + " %"
)
但如果我用资源来做:
perfusionIndexValue.postValue(
list.lastOrNull()?.perfusionIndex?.takeIf {
it != PerfusionIndex.NO_DATA
}?.value?.toString().orEmpty() + Resources.getSystem().getString(R.string.pi_percent)
)
我明白了
io.reactivex.rxjava3.exceptions.UndeliverableException: The exception could not be delivered to the consumer because it has already canceled/disposed the flow or the exception has nowhere to go to begin with. Further reading: https://github.com/ReactiveX/RxJava/wiki/What's-different-in-2.0#error-handling | android.content.res.Resources$NotFoundException: String resource ID #0x7f0e0081
我如何设置像“15 %”这样的文本
使用以下命令从视图模型中的资源中获取字符串 -
String s = getApplication().getString(R.string.pi_percent);
在你的情况下,我看到你需要这里的上下文。
但是,不应将片段的上下文或 Activity 传递到 ViewModel。仅使用 Application Context 获取资源,...或与 ViewModel 中的 Application 相关的内容。
在这里,如果您没有使用 Hilt(或 Dagger),那么您应该将 ViewModel()
替换为 AndroidViewModel(application)
,如下所示:
class MyViewModel(application: Application): AndroidViewModel(application) {
...
}
如果使用 Hilt,您可以像下面这样通过 @ApplicationContext
注释注入应用程序上下文,而无需扩展 AndroidViewModel()
:
@HiltViewModel
class MyViewModel @Inject constructor(
@ApplicationContext private val context: Context
): ViewModel() {
}
Here I note when using Hilt to inject Application Context into the ViewModel. You will see a warning about memory leak when injecting the Application Context into the ViewModel. This is a warning in the recent Hilt version, but I have tested Profiler and there is no leak.
并且您可以通过调用以下方式在 ViewModel 中获取资源作为字符串资源:
val myText = context.getString(R.string.your_string_id)