如何使用 mvvm 从 kotlin android 中的哈希图中的对象获取值
How to get values from an object in a hashmap in kotlin android using mvvm
我的 data/model class 中有一个散列映射,因为对象键是动态的
ApiResponse
data class ApiResponse(
val amount: String,
var rates: HashMap<String, Rates> = HashMap())
利率
data class Rates(
val currency_name: String,
val rate: String,
val rate_for_amount: Double)
查看
val map: Map<String, Rates> map = result.data.rates
由此获得的数据采用这种格式
{AFN=Rates(currency_name=Afghani, rate=1.0000, rate_for_amount=5.0)}
现在我有2个问题。
1 我正在使用 MVVM,我的模型 (Rates) 是否直接与我的视图交互?如果否,我如何重构干净的架构。
2如何根据得到的data/result得到keyrate_for_amount
的值,是一个object
第一季度
- 不,您应该使用视图模型从您的视图访问模型。要了解更多正确方法,您应该 read this
第二季度
- 如果您想从动态键中获取 rate_for_amount 的值,则可以使用循环获取该键,然后从该键中获取值。
fun getValues() {
map.keys.forEach {
val rateForAmount = map[it]?.rate_for_amount
}
}
如何将地图值从视图模型绑定到视图的示例
您必须在视图中添加绑定。
在视图的数据标记中添加视图模型变量。
在您的视图模型中,添加一个 MutableLiveData
变量。
val text = MutableLiveData<String>()
现在在文本视图的 setText 标记中调用此变量(您要显示值的位置)。
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{viewModel.text}"/>
更新视图模型的文本变量的值。 (我仅从视图模型更新值)
fun getValues() {
map.keys.forEach {
val rateForAmount = map[it]?.rate_for_amount
text.value = rateForAmount.toString()
viewModel.text.value = rateForAmount.toString()
}
}
我的 data/model class 中有一个散列映射,因为对象键是动态的
ApiResponse
data class ApiResponse(
val amount: String,
var rates: HashMap<String, Rates> = HashMap())
利率
data class Rates(
val currency_name: String,
val rate: String,
val rate_for_amount: Double)
查看
val map: Map<String, Rates> map = result.data.rates
由此获得的数据采用这种格式
{AFN=Rates(currency_name=Afghani, rate=1.0000, rate_for_amount=5.0)}
现在我有2个问题。
1 我正在使用 MVVM,我的模型 (Rates) 是否直接与我的视图交互?如果否,我如何重构干净的架构。
2如何根据得到的data/result得到keyrate_for_amount
的值,是一个object
第一季度
- 不,您应该使用视图模型从您的视图访问模型。要了解更多正确方法,您应该 read this
第二季度
- 如果您想从动态键中获取 rate_for_amount 的值,则可以使用循环获取该键,然后从该键中获取值。
fun getValues() {
map.keys.forEach {
val rateForAmount = map[it]?.rate_for_amount
}
}
如何将地图值从视图模型绑定到视图的示例
您必须在视图中添加绑定。
在视图的数据标记中添加视图模型变量。
在您的视图模型中,添加一个
MutableLiveData
变量。val text = MutableLiveData<String>()
现在在文本视图的 setText 标记中调用此变量(您要显示值的位置)。
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{viewModel.text}"/>
更新视图模型的文本变量的值。 (我仅从视图模型更新值)
fun getValues() {
map.keys.forEach {
val rateForAmount = map[it]?.rate_for_amount
text.value = rateForAmount.toString()
viewModel.text.value = rateForAmount.toString()
}
}