_uiState.value = uiState.value.copy() 不会导致重组

2023-11-30

我的代码出现了一些未解决的情况, 我的目标是更改“设备”列表中项目的属性(更新布尔值), 更改应该会导致视图重组,但这并没有发生, 此外,我可以看到该项目确实随调试器而更改,但它也会导致添加一个附加项目(没有包含更改的旧副本)以显示在我的列表中。

你知道我对新的价值分配有什么错误吗?

视图模型

private val _uiState = mutableStateOf(BTPairingState())
val uiState: State<BTPairingState> get() = _uiState 

这就是我编辑列表中项目的方式

    if (handlerDeviceResponse.status != null) {            
        viewModelScope.launch {
            uiState.value.devices.find { it.macAddress == handlerDeviceResponse.device.macAddress }?.isConnected = handlerDeviceResponse.status
            _uiState.value = uiState.value.copy()
        }
    }

BT配对状态:

data class BTPairingState (
    val devices: MutableList<BtDeviceItemUiModel> = mutableListOf(),
    val deviceType: DeviceType = DeviceType.RFID,
)

数据类

data class BtDeviceItemUiModel(
    val name: String,
    val macAddress : String,
    var isConnected: Boolean = false
)

屏幕:

@Destination
@Composable
fun BTPairScreen(
    viewModel: BTPairViewModel = hiltViewModel(),
) {

    val state = viewModel.uiState
    BTPairDevices(state.value.devices) { viewModel.deviceItemClicked(it) }



Replace var isConnected by val isConnected.

然后,更换val devices: MutableList<BtDeviceItemUiModel> = mutableListOf() by val devices: List<BtDeviceItemUiModel> = emptyList().

IOW,停止使用可变值inside您所在州的。

然后,您可以修改代码以更新您的MutableState具有新值,使用类似以下内容:

    if (handlerDeviceResponse.status != null) {            
            val newDevices = uiState.value.devices.map { device ->
              if (device.macAddress == handlerDeviceResponse.device.macAddress) {
                device.copy(isConnected = handlerDeviceResponse.status)
              } else {
                it
              }
            }
            _uiState.value = uiState.value.copy(devices = newDevices)
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

_uiState.value = uiState.value.copy() 不会导致重组 的相关文章

  • 如何在 Compose Image 中显示位图

    我有一个返回位图 其中 包含 QR 码 的函数 并且我想在Image 可组合函数 但我没有找到任何方法将位图转换为ImageBitmap或者只是显示该位图 基于这篇博文 https proandroiddev com display map
  • Android - 手机锁定时执行操作

    我想知道如何在手机锁定时执行某些操作 或继续侦听传感器或电池更换事件 当手机锁定时 它会停止监听传感器的变化 我尝试过使用唤醒锁 但它不起作用 也许我使用错误 任何帮助 将不胜感激 我建议为此使用服务 即使手机被锁定 它们也会在后台运行 这
  • 如何增加 Gradle 守护进程的最大堆大小?

    签署 apk 时 我收到以下消息 To run dex in process the Gradle daemon needs a larger heap It currently has 1024 MB For faster builds
  • 从 admob 独立 SDK 切换到 Google Play 服务 SDK 时,apk 大小会膨胀

    使用 Admob SDK 我的 apk 大小为 230Kb 当用 google play services SDK 替换 Admob SDK 时 它是 1 5MB 膨胀了 6 倍以上 我想完整的 Google Play 服务客户端 SDK
  • 在 Android 中从互联网链接获取数据

    我正在制作一个带有 URL 的应用程序 asp 扩展名 我们向其传递所需的参数并使用 POST 方法获取一些字符串结果 关于如何实现这一目标有什么建议吗 UPDATED 实际上我有一个 net 链接 它接受一些 POST 参数并给我一个结果
  • Android 测试 java.lang.NoClassDefFoundError 由于 Fest-Android 出现错误

    我目前正在我的项目中实现 Android 版 Fest 但我似乎遇到了依赖问题 如果我在不包含 Fest 库的情况下运行测试 测试将正常运行 一旦我添加了 Fest 库 测试就不再运行 相反 会抛出异常 我的项目使用以下依赖项 compil
  • Android异步服务调用策略

    这是场景 客户端对服务进行远程调用 返回 void 并提供 回调对象 服务在后台线程上执行一些长时间运行的逻辑 然后使用回调对象来触发以太成功或失败 因为这些操作视觉元素 执行 Activity runOnUiThread 块 该场景运行良
  • XAMARIN - 添加来自 youtube 的视频

    我搜索如何从 youtube 添加视频的信息 例如 我想从一些 YouTube 链接添加视频 我认为它应该在网络视图中 但我需要一些详细信息 因为我找不到有关我的问题的任何信息 您可以使用 webview 播放 youtube 视频 str
  • 垂直翻转 Android Canvas

    有没有一种简单的方法可以在 Android 中翻转画布 我似乎找不到任何可以让我垂直翻转它的东西 这样 y 轴上的零就是手机屏幕的底部而不是顶部 如果解决方案不是特别快也没关系 因为我没有对画布进行任何计算密集的操作 提前致谢 Try ca
  • Android 应用程序主活动出现 ClassNotFoundException

    大多数设备都可以运行我的应用程序 但我收到此错误报告 java lang RuntimeException Unable to instantiate activity ComponentInfo com company app com c
  • 获取包含位图支持的画布的 Android 视图上的点的像素颜色值

    我正在尝试找出获取给定点上像素颜色值的最佳方法View http developer android com reference android view View html 我可以通过三种方式写入视图 我设置了背景图像View setBa
  • 如何将您的终端与 Android 模拟器连接

    我尝试导航到 android 工具文件夹并输入 adb shell 命令 但它似乎不起作用 我的终端似乎只能识别命令的 adb 部分 并给我一条错误消息 我究竟做错了什么 通过键入列出所有连接的设备adb devices 检查是否列出了任何
  • 通过覆盖滑动调整图像大小不会调整图像大小

    我在用着Glide下载并显示图像 但是 当我尝试调整图像大小时 它不会这样做 我得到随机大小 或者可能是图像的实际大小 这是我用于通过 Glide 加载的代码 Glide with context load file getUrl asBi
  • Eclipse Android 模拟器 - 键盘不工作

    我刚刚更新到最新的 SDK 版本 16 使用最新版本的 API 16 创建了新版本的 AVD 并且我的硬件键盘在模拟器上不再工作 甚至我的其他 avd 使用旧版本的 sdk 任何想法如何解决这一问题 您的 AVD 的 键盘支持 硬件属性是否
  • 为什么 Android 上的免安装应用有两种设置?

    我使用的是运行 Android 11 的 Pixel 3 我发现有 2 种不同的设置可以控制免安装应用的某些方面 设置 应用程序和通知 默认应用程序 打开链接 即时应用程序 即使未安装 也打开应用程序中的链接 切换默认为开 Google P
  • 特定铃声 firebase 通知 xamarin.android

    How i can force the push notification to run ringtone instead of default notification sound is there any way to ovveride
  • Android RxJava 2 JUnit 测试 - android.os.Looper 中的 getMainLooper 未模拟 RuntimeException

    我在尝试为正在使用的演示者运行 JUnit 测试时遇到 RuntimeExceptionobserveOn AndroidSchedulers mainThread 由于它们是纯 JUnit 测试而不是 Android 仪器测试 因此它们无
  • 尝试重新打开已关闭的对象:sqlitequery

    所以本质上我查询数据库两次 我不明白这个错误真正来自哪里 因为我没有在任何地方关闭数据库 返回错误的代码是这样运行的 我查了一下 刚刚看到一个像我这样的案例 BeaconHandler pullAllDB new BeaconHandler
  • 如何为部分 Android 活动创建通用代码?

    我的申请中有 14 项活动 这 9 个活动中包含自定义标题栏和选项卡窗格 所以在这里我需要在一个地方编写这个通用代码 而不是在每个包含自定义标题栏和选项卡窗格代码的活动中编写冗余代码 即布局及其活动特定代码 有哪些可能的方法可以做到这一点
  • 活动构建变体没有测试工件

    我基于 调试 构建变体创建了一个名为 bitrise 的新构建类型 使用 debug 构建变体时 经过检测的 androidTests 构建并运行良好 但是当我切换到新的 bitrise 构建变体时 出现以下错误 Process finis

随机推荐

  • 带有 FlowLayout 小部件的 QScrollArea 无法正确调整大小

    我想创建一个类似于 KDE 或 Gnome 或 MacOS 系统设置的小部件 例如 像这张图片 我已经实现了 FlowLayoutQt 文档示例 如果我将一些 FlowLayout 小部件 用 QVBoxLayout 包装在容器小部件中 放
  • Javascript字符串替换不起作用[重复]

    这个问题在这里已经有答案了 所以我有一个字符串 房间描述 并且想替换部分
  • 如何尝试解析枚举值?

    我想编写一个函数 它可以根据给定值 作为字符串传递 验证可能的值enum 如果匹配 它应该返回枚举实例 否则 它应该返回默认值 该函数不能在内部使用try catch 这排除了使用Enum Parse 当给出无效参数时会引发异常 我想使用类
  • jquery click() 事件不适用于附加的 html 标签

    在我的问题有意义之前 我需要解释一些事情 在我的第一页上 我有一个主 div 我在其中使用 jquery load 方法从另一个页面加载标记 我正在加载的 html 链接到我的脚本所在的 js 页面 js 页面是我操作主 div 内容的地方
  • 通过 NSStream 在 iOS 设备之间发送后解析数据

    我有一个应用程序设置为在两个 iOS 设备之间发送数据NSStream通过 TCP 连接 发送的数据由两部分组成 一个整数 指示即将到来的消息对象的大小 消息对象 一些NSStrings and an NSData使用 NSKeyedArc
  • 如何更改 FireFox 中悬停选择选项的颜色

    我想更改 FireFox 中悬停的选择选项的颜色 它具有默认的蓝色背景和白色前景 我试过
  • Azure 数据工厂中没有管道图

    我使用复制数据向导创建了 2 个管道 但当我单击 图表 操作时 两个管道都没有显示 我收到消息 该工厂不包含管道或数据集 管道均成功运行 并且在单击 管道 边栏选项卡时确实会显示 两条管道均配置为一次性 关于为什么会发生这种情况以及如何解决
  • int(11) 与 int(任何其他)

    我是网络编程新手 正在做一些可以在网上找到的不同教程 我进行了研究 发现在 int 11 中 11 是整数的最大显示宽度 并且它是默认值 除非整数是 UNSIGNED 在本例中为 10 当我看到这样的东西时 id INT 11 not nu
  • 如何使用 asp.net 在 Chrome 中删除或过期 cookie

    这是那些愚蠢的问题之一 答案应该很简单 但似乎不起作用 有人知道我还能去哪里寻找代表吗 我在单击按钮时添加 cookie var impersonationCookie new HttpCookie UserImp ImpAuid impe
  • 从函数返回值,其中 ipython 小部件用于获取输入参数

    我正在尝试 小部件化 我的 IPython 笔记本 但在事件和函数返回值方面遇到了麻烦 这是我认为最好的工作流程 使用小部件获取任意函数的输入值 在事件触发时调用该函数 从函数返回值 我首先尝试使用 interact 方法来调用该函数 但这
  • 有没有办法在构造函数中使用锁定的标准输入和输出,使其与您正在构造的结构一样长?

    我正在建造一个PromptSet可以连续提出一系列问题 出于测试原因 它允许您传递读取器和写入器 而不是直接使用标准输入和标准输出 因为 stdin 和 stdout 是常见的用例 所以我想创建一个默认的 构造函数 允许用户生成一个Prom
  • 如何将 div 标签附加到 SVG 矩形元素中?

    我找不到这个问题的正确解决方案 所以我决定写一个新问题 我什至不确定这是否可能 但我希望如此 这是浏览器提供的 HTML 我从浏览器中的 元素 选项卡复制它
  • 如果 ModelState.IsValid 失败,收到错误消息吗?

    我的控制器中有这个功能 HttpPost public ActionResult Edit EmployeesViewModel viewModel Employee employee GetEmployee viewModel Emplo
  • JAVA .properties 文件

    有一个小问题 我创建了一个属性文件 config properties 位于 resource config properties 这是当前的文件 destinationPDF D Documents NetBeansProjects pr
  • 不同DBMS之间的数据迁移

    因为我无法得到任何满意的答案Question看来我们必须为此编写自己的程序 我们正处于设计阶段 我们正在考虑应该使用哪种格式来备份数据 该程序将用Delphi 编写 需要在 Oracle Informix Msserver 之间导出 导入数
  • 绝对 URL 无 Cookie

    ASP NET 中是否有某种方法可以通过无 Cookie 会话获取绝对 URL 更新 我需要创建其他新的 URL 这不是请求的 URL 我正在使用 Response ApplyAppPathModifier 来获取带有 cookie 会话的
  • 编译器错误消息:无法将类型“long”隐式转换为“string”

    我在转换方面遇到问题 这个转换有什么问题吗 这是错误 编译错误说明 在编译服务此请求所需的资源期间发生错误 请查看以下具体错误详细信息并适当修改您的源代码 编译器错误消息 CS0029 无法将类型 long 隐式转换为 string if
  • 如何在C++和QT中的另一个窗口中显示主窗口的结果图像?

    我目前正在研究 Qt Creator 我想通过在主窗口中从硬盘浏览来获取图像 然后将 RGB 彩色图像转换为灰度图像后 我想在另一个窗口中显示灰度图像 通过单击 浏览 按钮 可以加载彩色图像 其中将应用彩色到灰度图像转换 这里grayIma
  • 如何自定义语义 UI 按钮(背景颜色、边框半径等)

    如何自定义语义 UI 按钮 背景颜色 边框半径等
  • _uiState.value = uiState.value.copy() 不会导致重组

    我的代码出现了一些未解决的情况 我的目标是更改 设备 列表中项目的属性 更新布尔值 更改应该会导致视图重组 但这并没有发生 此外 我可以看到该项目确实随调试器而更改 但它也会导致添加一个附加项目 没有包含更改的旧副本 以显示在我的列表中 你