我想使用MVVM / Room获得单个项目并在详细信息屏幕中对其进行编辑。我遵循了许多用于创建MVVM / Room应用程序的指南和示例。在其中许多存储库类中,如下所示:
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中提取方案,而不是返回数据库/房间?
如果您不需要整个数据列表,而只需要单个项目,则按ID进行查询非常有用。
如果仍然观察到整个列表,但是对于某些UI组件需要按ID获取项目,我建议您为该特定项目ID过滤列表。
您可以通过问题中的查询来检索对象,或者如果要观察数据库中的更改,请将其包装在LiveData中。