gpt4 book ai didi

java - Android:在 View 中使用观察者模式(可能与 MVC、MVVM 相关)

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:08:19 33 4
gpt4 key购买 nike

我花了几个小时阅读有关在 Android 中实现各种 MVC 类型模式的各种问题和答案。我在各种博客中看到了一些代码示例。但是,我仍然会欣赏关于我正在努力实现的目标的一些想法和意见。具体来说,我想找出最佳代码机制来通知单个 View 或一组 View 特定数据项已更改。

我的应用程序非常简单,它通过蓝牙从硬件设备获取测量数据,并显示和记录该数据。目前,我有一项服务负责蓝牙通信和后台日志记录。我有一个“全局”数据存储类,它是应用程序的扩展。

当从外部设备轮询测量数据时,测量数据(实际上是大约 30 个字节的数据)在数据存储对象(用 MVC 术语来说,我猜是“模型”)中更新).

在任何时候,UI View 只会显示该数据的一小部分。通常,给定的 View 只会对表示测量数据的一个特定字节感兴趣。当用户移动到不同的 Activity 类时,将显示其他 View ,这些 View 将显示该数据的不同子集。

所以直截了当,我正在尝试选择最佳方式来在给定数据项更改时在感兴趣的 View 上调用 invalidate()

选项似乎是:

  1. 利用现有的 Observer 类和相关类。

  2. 通过在数据模型中创建我自己的 register() 和 unregister() 函数,实现“我自己的”观察者模式。观察者 View 将保存在 ArrayList 中(或者可能是每个数据项一个观察者列表的更复杂排列)。每次更新数据并调用 invalidate()(当然也可以是 postInvalidate(),具体取决于我的线程安排),我都会遍历此 ArrayList。

为什么我应该使用上述其中一个而不是另一个?还有我应该考虑的任何其他“观察者”机制吗?

最佳答案

Android 中的许多 View 都由 BaseAdapter 的某些子类支持它有一个方法 notifyDataSetChanged()它指示 View 刷新自身。如果您正在使用 View (例如 ListViewGridViewAdapterView 的任何后代),那么它由 BaseAdapter 支持,您只需更新该适配器, View 就会自行刷新。

我猜这意味着,我投票赞成您使用内置的观察者模式。如果您使用的是自定义 View ,那么显然这将不起作用,您无论如何都必须使用自定义的刷新方法。

关于java - Android:在 View 中使用观察者模式(可能与 MVC、MVVM 相关),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6670052/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com