LiveData

大象笔记 > 标签 > LiveData

Android ViewModel 与 LiveData 的使用场景

概述 在 activity 中监听 ViewModel 中数据的变化,当有变化时,将对应的数据显示在界面组件上 LiveData 在 ViewModel 中使用,上面监听的数据类型就是 LiveData 类型。 同时可用于 Activity 及 Fragment 间的数据共享 使用逻辑 在 activity 内新建一个 ViewModel,监听数据变化 当有数据变化时,在回调中,更新 UI View 的展示 ViewModel 内部则类似微信小程序的 data,里面定义一堆变量,监听的就是这些变量的变化,然后通过 postValue, setValue 这种类似小程序 setData 的 ...

阅读全文...

Jetpack Compose 使用 MutableLiveData 及 observeAsState 实现详情页的数据查询

思路 对 viewmodel 中 livedata 的监听也是返回一个 state. 但这个 state 是不能像 compose 内的 state 直接修改的。要修改,需要调用 viewmodel 中的函数来间接修改。 尝试过的方案 方案一(失败):ViewModel 中定义 mutableStateOf, Composable 中定义 mutableStateOf。mutableStateOf 看起来是初始化那一刻用的啥值,就是啥值,无法自动更新。 方案二(可行):ViewModel 中定义 MutableLiveData,Composable 中使用 observeAsState 监听 ...

阅读全文...

Android LiveData

可以包含任何类型的数据,通过监听 LiveData,在数据发生变化时,可以立即得到通知。 LiveData 与 ViewModel 通常 LiveData 定义在 ViewModel 中,然后在 Activity / Fragment 中监听 LiveData 的变化。 不在 Activity 中定义 LiveData,原因有两点: 防止 Activity / Fragment 过于臃肿。要分工明确:Activity / Fragment 只负责显示数据;ViewModel 负责存储数据及状态。 防止 Activity 因屏幕旋转被销毁,状态数据消失。而存在 ViewModel 中就能很好的 ...

阅读全文...

Android 使用 LiveData 显示实时状态变化

例如加载数据时, 显示转圈提示。或者显示 connecting / finding data ... 也可以加上动态图标: https://github.com/material-components/material-components-android/blob/master/docs/components/ProgressIndicator.md 用最下面的转圈图标非常直观。 注意还有失败的情况,比如列表中蓝牙设备消失或关闭。 状态放在哪里 还是存储在 ViewModel 中最合适。 同时在 activity / fragment 中对状态 LiveData 进行监听。 LiveData ...

阅读全文...

Android LiveData 实现列表勾选

界面功能 界面功能是禁忌症确认,只有不存在任何一项的时候,才能进入使用。 每一项是一个 Switch 按钮,代表是否勾选。 记录目的 感觉我对 LiveData 的理解还是不够充分。也许经历越多的实战,才能理解更多吧。 修改其中一个 item 的 field class ViewHolder(private val binding: ConfirmRowItemBinding) : RecyclerView.ViewHolder(binding.root) { fun bind(item: ConfirmationItem) { binding.name.text = item.ti ...

阅读全文...

Android LiveData 实战总结

这周在重构一个 Android 平板蓝牙控制的 App,之前为了赶工期,代码写的比较乱, 正好这段时间赶上多个客户的定制要求,发现要一套代码实现多套差异化的需求,如果代码不好好规整根本改不动。 自己欠的技术债,总归是要还的。 在改造的过程中,发现之前使用 LiveData 的方式有不少问题,总结一下: 逻辑不要放在 Fragment 中 能在 ViewModel 中处理的,尽量在 ViewModel 中处理。 Activity / Fragment 尽量只监听 LiveData, 然后直接显示,不做任何复杂的逻辑判断。 集中在 ViewModel 处理,逻辑更清晰。 多个 Fragment ...

阅读全文...