MVVM/Room 从 Dao 或 Repository 中拉取单个项目,最好的方法是什么?
MVVM/Room pulling a single item from the Dao or Repository, what is the best approach?
我想使用 MVVM/Room 获取单个项目并在详细信息屏幕中对其进行编辑。我遵循了一些创建 MVVM/Room 应用程序的指南和示例。其中许多存储库 class 如下所示:
public class ScenarioRepository {
private static final String TAG="ScenarioRepository";
private ScenarioDao scenarioDao;
private LiveData<List<Scenario>> allScenarios;
public ScenarioRepository(Application application) {
AppDatabase database = AppDatabase.getInstance(application);
scenarioDao = database.scenarioDao();
allScenarios = scenarioDao.getAllScenarios();
}
....
}
示例侧重于填充 RecyclerView 以及在编辑其中一条记录时将 RecyclerView 中的所有值传递到编辑屏幕。记录中的信息经常比 RecyclerView 上显示的信息多,所以我更愿意从数据库中提取记录,并且看到了一些 MVVM 实现,其中 DAO 对这样的项目有特定的调用:
@Query("select * from Scenario where id = :id")
Scenario getItembyId(int id);
在此示例中检索我想要的场景的最佳方法是什么?当存储库从构造函数中的 DOW 中提取完整的场景列表时,为什么我需要获取单个项目?我是否应该在存储库中有一种方法从存储库中的成员变量 allScenarios 中提取场景,而不是返回到 database/Room?
更新
我遵循了 these instructions which covered the master/detail scenario very well. The I extended the RecyclerView like in this video,这使得在 onItemClick 事件期间设置项目并将其传递给 ViewModel 这样细节片段就可以得到它变得很容易。
在您不需要整个数据列表而只需要单个项目的情况下,按 ID 过滤的查询很有用。
如果您仍然观察整个列表,但某些 UI 组件需要通过 ID 获取项目,我建议您针对该特定项目 ID 过滤列表。
您可以通过问题中的查询来检索您的对象,或者如果您想观察数据库中的更改,请将其包装在 LiveData 中。
我想使用 MVVM/Room 获取单个项目并在详细信息屏幕中对其进行编辑。我遵循了一些创建 MVVM/Room 应用程序的指南和示例。其中许多存储库 class 如下所示:
public class ScenarioRepository {
private static final String TAG="ScenarioRepository";
private ScenarioDao scenarioDao;
private LiveData<List<Scenario>> allScenarios;
public ScenarioRepository(Application application) {
AppDatabase database = AppDatabase.getInstance(application);
scenarioDao = database.scenarioDao();
allScenarios = scenarioDao.getAllScenarios();
}
....
}
示例侧重于填充 RecyclerView 以及在编辑其中一条记录时将 RecyclerView 中的所有值传递到编辑屏幕。记录中的信息经常比 RecyclerView 上显示的信息多,所以我更愿意从数据库中提取记录,并且看到了一些 MVVM 实现,其中 DAO 对这样的项目有特定的调用:
@Query("select * from Scenario where id = :id")
Scenario getItembyId(int id);
在此示例中检索我想要的场景的最佳方法是什么?当存储库从构造函数中的 DOW 中提取完整的场景列表时,为什么我需要获取单个项目?我是否应该在存储库中有一种方法从存储库中的成员变量 allScenarios 中提取场景,而不是返回到 database/Room?
更新 我遵循了 these instructions which covered the master/detail scenario very well. The I extended the RecyclerView like in this video,这使得在 onItemClick 事件期间设置项目并将其传递给 ViewModel 这样细节片段就可以得到它变得很容易。
在您不需要整个数据列表而只需要单个项目的情况下,按 ID 过滤的查询很有用。
如果您仍然观察整个列表,但某些 UI 组件需要通过 ID 获取项目,我建议您针对该特定项目 ID 过滤列表。
您可以通过问题中的查询来检索您的对象,或者如果您想观察数据库中的更改,请将其包装在 LiveData 中。