android - 没有引用 View with Camera 2 的 ViewModel

标签 android mvvm android-camera2 android-architecture-components

在 MVVM 中,ViewModel 绝不能引用 View 。但是如何使用 Camera 2 API 实现呢? 对于相机设置,需要 TextureView 参数(例如 TextureView.surfaceTextureTextureView.isAvailableTextureView.width).

我正在尝试从 Camera2Basic example 中添加逻辑到 ViewModel。 通过自定义 cameraInit(...) 函数传递所需值是干净的解决方案还是将该代码保留在 fragment 中更好?

最佳答案

一般来说,作为 MVVM 的一部分,ViewModel 是您的 View ( fragment )和模型(在您的情况下是一些文件管理器,用于将图像保存到文件)之间的组件。正如您已经提到的,ViewModel 的最佳实践是对 View 一无所知。考虑到这一点,ViewModel 应该从 View 中接受一些数据(例如位图)并将其传递给模型。您可以通过处理 Fragment 中所有依赖于 View 的代码(或者如果您想让 Fragment 尽可能保持干净,则处理相机的一些辅助类)并将其传递给 ViewModel 来实现这一点。

这样做的主要目的是可以在不需要仪器的情况下使用简单的单元测试来测试您的 ViewModel。知道使用 MVVM 或 MVP 等架构不会降低代码的复杂性始终很重要,通常情况下,复杂性甚至会增加,因为您具有相同的逻辑加上架构的开销。由于这个事实,您总是必须考虑是否值得应用 MVVM(如果您无论如何都不想测试您的代码并且类也不会太大,那么它不会有太大帮助)。

关于android - 没有引用 View with Camera 2 的 ViewModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51708531/

相关文章:

android - 在云上的iOS和Android之间共享本地化

android - 出现虚拟键盘时适配组件

c# - PropertyChanged 在 ViewModelBase 中始终为 null

c# - 当我单击 ListBoxItem 时,如何使 StackPanel 滑到一边

android - 如何在预览到 Android Camera2 API 期间获取指向每个帧数据的指针?

android - 在 android camera2API 中控制传感器 ISO 和曝光时间

android - 在从 url 获取的资源可绘制对象中显示标记

android - 在应用程序中创建一个 map fragment 以及其他 fragment

c# - 创建文本框问题?

android - ImageReader 使相机滞后