如何使用 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
   }
 }

如何将地图值从视图模型绑定到视图的示例

  1. 您必须在视图中添加绑定。

  2. 在视图的数据标记中添加视图模型变量。

  3. 在您的视图模型中,添加一个 MutableLiveData 变量。

    val text = MutableLiveData<String>()

  4. 现在在文本视图的 setText 标记中调用此变量(您要显示值的位置)。

    <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@{viewModel.text}"/>

  5. 更新视图模型的文本变量的值。 (我仅从视图模型更新值)

fun getValues() {
map.keys.forEach {
val rateForAmount = map[it]?.rate_for_amount
text.value = rateForAmount.toString()
viewModel.text.value = rateForAmount.toString()
}
}