如题,谷歌为什么这么设计呢?
我个人比较喜欢用 view ,特别是 Activity 比较大,业务比较多时,喜欢拆分成各个部分变成自定义 view ,再自定义自己的 ViewModel 。
可官方的 ViewModel 不源生支持自定义 view ,用 Fragment 的话又太重。
|      1kwanzaa      2022-07-29 20:08:59 +08:00  1 你想把 VM 写 View 里去?我觉得你该重学 MVVM 了。。。 | 
|      2KratosOmega OP @kwanzaa 我是说为什么 view 不能像 activity 那样使用 viewmodel | 
|      3kwanzaa      2022-07-29 23:43:58 +08:00 @KratosOmega 因为 View 在生成和绘制只占有生命周期中的一小部分。你想用它 Host 数据的话。。。  The ViewModel class is designed to store and manage UI-related data in a lifecycle conscious way. The ViewModel class allows data to survive configuration changes such as screen rotations. | 
|  |      4fromzero      2022-07-30 00:32:51 +08:00 因为 View 本身就没有完整的生命周期的概念,View 只有 attachWindow dettachWindow 这些,View 完全跟随 Fragment/Activity 的生命周期,View 属于 ui 组件,而不是 ui 容器,容器是用来装控件的,所以有生命周期的概念。而 ViewModel 的生成和销毁是需要伴随宿主的生命周期的。 | 
|  |      5fromzero      2022-07-30 00:36:05 +08:00 非要给自定义 View 加上 ViewModel 也不是不行,可以用自定义 View 创建一个自定义的容器,然后给他加上完整的生命周期,实现 ViewModelStoreOwner 接口的方法。 | 
|  |      6fromzero      2022-07-30 00:39:39 +08:00 但是最大的问题是,View 本身的生命周期就是依附于 Fragment/Activity 的,所以你不得不手动把生命周期往下传递给你的自定义 View 管理,挺麻烦的。 | 
|      7KratosOmega OP @fromzero 是的,从实现的角度来看是可以实现的,但是为什么官方不去实现 是鼓励大家用 fragment 吗,但是这玩意又比 view 重很多 至少我认为在 view 中使用 livedata 很有价值 | 
|  |      8300      2022-07-30 08:54:45 +08:00 via Android jetpack comoose 里可以用 viewmodel ,虽然也是绑到 activity ,但看起来和用起来是绑到了 view | 
|      9KratosOmega OP @winterbells 为了用 livedata 让整个 app 迁移到 compose 代价太大了,而且目前个人不太喜欢 compose | 
|  |      10rb6221      2022-07-30 14:02:40 +08:00 view 自己硬要说的话没有生命周期,他的生命周期是随着 Activity/Fragment 变化的 | 
|      11KratosOmega OP @janus77 是啊,要改的话,只能让 view 去感知 activity 的生命周期 本身就 onAttach onDetach | 
|      12GLee9507      2022-08-04 10:56:57 +08:00 Fragment 就是轻量级的 View 容器,OP 说的重指的是什么重呢? |