java - 在 MVVM 中显示对话框、布局和数据过滤
问题描述
我从 MVVM 架构开始我的冒险,遇到了几种我找不到明确答案的情况。
显示例如 AlertDialog。我目前正在显示活动(视图)中的 AlertDialog,因为 ViewModel 不应包含对视图的任何引用。这是正确的机制吗?
最近,我正在制作一个应用程序,其中我从数据库中获取所有任务。任务分为 3 个类别,我需要将每个类别的任务放在单独的列表中。我在活动(视图)中按以下方式进行操作:
viewModelMainActivity = new ViewModelProvider(this).get(ViewModelMainActivity.class); viewModelMainActivity.getAllTasks().observe(this, new Observer<List<Task>>() { @Override public void onChanged(List<Task> tasks) { List<Task> allJobTasks = new ArrayList<>(); List<Task> allShoppingTasks = new ArrayList<>(); List<Task> allOtherTasks = new ArrayList<>(); for(int i = 0; i < tasks.size(); i ++) { String category = tasks.get(i).getCategory(); switch (category) { case JOB_CATEGORY: allJobTasks.add(tasks.get(i)); break; case SHOPPING_CATEGORY: allShoppingTasks.add(tasks.get(i)); break; case OTHER_CATEGORY: allOtherTasks.add(tasks.get(i)); break; } } taskAdapter.setAllJobTasks(allJobTasks); taskAdapter.setAllShoppingTasks(allShoppingTasks); taskAdapter.setAllOtherTasks(allOtherTasks); showOrHideImageAndText(allJobTasks, JOB_CATEGORY); showOrHideImageAndText(allShoppingTasks, SHOPPING_CATEGORY); showOrHideImageAndText(allOtherTasks, OTHER_CATEGORY); taskAdapter.setCurrentTasks(currentCategory); } });
这是正确的方法吗?我不这么认为,但我还能如何按类别过滤数据?
解决方案
回答这两个问题
1.-您在活动中执行此操作是正确的,因为否则您必须将活动引用发送到视图模型
2.-正如我可以在您的代码中假设的那样,您稍后会使用这些列表来填充视图,正确的做法是在将响应返回到活动之前填充视图模型中的列表,但不是这样作为信息管理的繁重逻辑我认为它不是 100% 必要的,所以可以在活动中这样做
推荐阅读
- gradle - 有没有办法用升级的 gradle 版本创建一个新的颤振项目?
- php - 在数组php中搜索重复值并求和
- python - 如何验证一个数组是否包含另一个数组
- mysql - 通过双重分组,双重计数加入多个表
- sumo - 定义不同离开速度的流入/秒
- spring-boot - 如何使用 Spring Boot + Logback 在日志中添加 DataDog 跟踪 ID
- python - 如何在 Python 中使用 pyglet 库中的 batch.draw() 绘制精灵
- hyperledger-fabric - 限制组织内选定用户访问频道
- php - 输入 ID 名称显示到 URL?
- c# - 为什么 int 的默认运算符?是不是一致的?