用于自定义视图的Android ViewModel

时间:2018-03-28 11:03:57

标签: android android-custom-view android-architecture-components

我想重构我的自定义视图以使用Android架构组件。但是,我看到了

ViewModelProviders.of(...)

仅采用活动或片段。知道如何让它工作吗?我应该使用片段而不是自定义视图吗?

1 个答案:

答案 0 :(得分:0)

虽然不推荐,但可以在 View 中获取一个 ViewModel 实例。根据{{​​3}}:

<块引用>

虽然在 Activity 或 Fragment 中获取 ViewModel 很容易,但在 View 中获取此实例并不简单。这背后的主要原因是因为 Views 应该独立于所有处理,即使您的所有逻辑都在 ViewModel 内,您在 View 内访问该 ViewModel 的事实使它依赖于它不应该依赖的东西。控制 View 的推荐方式是根据 ViewModel 的状态从 Fragment 或 Activity 向其传递参数。

重点是尝试从上下文中获取 Activity:

Enter the number of vertices: 2                                                                                                                                     
                                                                                                                                                                    
Please label the vertices ('A', 'B', 'C', etc.)                                                                                                                     
Label for vertex 1: A                                                                                                                                               
Label for vertex 2: B                                                                                                                                               
                                                                                                                                                                    
Enter two edges between OUTPUT i and i+1 vertices (e.g. 1 5): 1 5                                                                                                   
Enter the weight of this edge: 2                                                                                                                                    
Segmentation fault (core dumped)                                                                                                                                    
                                                                                                                                                                    
                                                                                                                                                                    
...Program finished with exit code 139                                                                                                                              
Press ENTER to exit console.

如前所述,如果可能,我会尽量避免这种方法。