小编use*_*848的帖子

android viewmodels之间的相互通信

我有一个客户详细信息页面,它从“客户”表加载客户详细信息,并允许对某些详细信息进行一些编辑,其中一个是客户的位置。客户的位置是从“位置”表加载下拉项目的微调器。

所以我目前的实现是我有一个 CustomerActivity,它有一个 CustomerViewModel 和 LocationViewModel

public class CustomerActivity extends AppCompatActivity {
    ...
   onCreate(@Nullable Bundle savedInstanceState) {
      ...
      customerViewModel.getCustomer(customerId).observe(this, new Observer<Customer>() {
         @Override
        public void onChanged(@Nullable Customer customer) {
            // bind to view via databinding
        }
      });

      locationViewModel.getLocations().observe(this, new Observer<Location>() {
         @Override
        public void onChanged(@Nullable List<Location> locations) {
           locationSpinnerAdapter.setLocations(locations);
        }
      });
   }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是如何使用“客户”表中的值设置位置微调器,因为两个视图模型执行顺序的 onChanged 可能不同(有时客户加载速度更快,而其他位置加载速度更快)。

我考虑过仅在客户加载后加载位置,但是无论如何我可以在使用“客户”表中的值填充客户的位置微调器时同时加载两者?

android mvvm android-architecture

6
推荐指数
1
解决办法
3177
查看次数

Android Navigation 组件和 Viewmodel 之间会如何交互?

Android Viewmodel 可以具有活动或片段的范围/生命周期,但这在导航组件中如何工作?

考虑我是否有以下情况:

主要活动 
 - 包含 NavHostFragment

客户列表片段 
 - 导航的起点
 - 单击列表中的任何客户,将导航 CustomerDetailsFragment

客户详细信息片段
 - 包含一个带有 3 个片段的选项卡:CustomerDetailFragment、CustomerContactFragment 和 CustomerOrderHistoryFragment

客户详细信息片段
 - 显示客户的一般信息,如姓名、年龄、性别等...
 - 从 CustomerViewModel 获取数据

客户联系片段
 - 显示客户地址、电话、传真等
 - 从 CustomerViewModel 获取数据

客户订单历史片段
 - 显示客户的订单历史
 - 从 OrderHistoryViewModel 获取数据

在上面的场景中,是否可以为 CustomerDetailFragment 和 CustomerContactFragment 共享相同的 CustomerViewModel 实例?

如果我没有使用导航组件,我可以让 CustomerDetailsFragment 成为一个活动并将我的视图模型初始化为该活动,但由于在导航中我们只有片段,我怎样才能最好地实现这一点?

我想:

公共类 CustomerDetailsFragment 扩展 Fragment {
...
CustomerViewModel 模型 = ViewModelProviders.of(this).get(CustomerViewModel .class);
...

但是如何将这个 viewmodel 实例传递给 CustomerDetailFragment 和 CustomerContactFragment?

或者有没有更好的方法来构造上面的代码以达到相同的结果?

android-viewmodel android-architecture-navigation

5
推荐指数
2
解决办法
2140
查看次数

Android Room 的部分实体绑定

想确认是否可以将实体 bean 绑定到表的部分列?

例子:

表“A”有列 id, col1, col2, col3, col4, col5, ... , col10

但是我只需要 id、col1、col2,所以我创建了一个包含字段 id、col1、col2 的实体 bean 并且只对这些字段进行绑定?我尝试这样做,但得到:

引起:java.lang.IllegalStateException: Room 无法验证数据完整性。看起来您已更改架构但忘记更新版本号。您可以通过增加版本号来简单地解决此问题。

感谢是否有人可以验证是否可以使用 Room Persistence Library 进行上述绑定。

(注意:为什么我的表中有一些列没有在移动应用程序中使用。这些表模式是服务器端某些表的精确副本,因此某些字段在服务器端 webapp 中使用)

android-room

4
推荐指数
1
解决办法
1502
查看次数