android.content.res.$NotFoundException:字符串资源ID #0



我想在我的应用程序中的银行列表中实现搜索功能。所以我需要使用stringResId()但是你不能在没有可组合的func()的情况下调用它。也通过使用resources . getsystem (). getstring()给我的资源没有发现异常。

这是我的viewModel代码

class BankViewModel: ViewModel() {
private val _bankAccount = MutableStateFlow(BankAccount())
val bankAccount: StateFlow<BankAccount> = _bankAccount.asStateFlow()
var bankList = mutableStateOf(Banks)
private var cachedBankList = listOf<Bank>()
private var isSearchStarting = true
var isSearching = mutableStateOf(false)
fun updateBankSearch(searchName: String) {
_bankAccount.update { bankAccount ->
bankAccount.copy(bankName = searchName)
}
}
fun searchBankName(query: String) {
val listToSearch = if(isSearchStarting) {
bankList.value
}else {
cachedBankList
}
viewModelScope.launch {
if (query.isEmpty()) {
bankList.value = cachedBankList
isSearching.value = false
isSearchStarting = true
return@launch
}
val results = listToSearch.filter {
Resources.getSystem().getString(it.bankName).contains(query.trim(), ignoreCase = true)
}
if (isSearchStarting) {
cachedBankList = bankList.value
isSearchStarting = false
}
bankList.value = results
isSearching.value = true
}
}
}

This is my Bank

data class Bank (
@StringRes val bankName: Int,
@DrawableRes val bankLogo: Int = R.drawable.bank_image_2
)

所以我的问题是我如何通过使用id来获得字符串,以便我可以将其与查询进行比较?

您需要使用ApplicationContext来检索这些资源。

如果你不使用任何DI框架,或者你不想使用自定义的ViewModelProvider.Factory,扩展AndroidViewModel(它持有对Application的引用)而不是常规的ViewModel

理想的ViewModels不应该包含任何android特定的对象,你会使用一些自定义的StringProvider,或类似的东西,但这不是你的问题的主题。