【发布时间】:2018-09-19 11:53:39
【问题描述】:
我有一个带有 RecyclerView 和 FloatingActionButton 的片段。按 fab 会打开一个对话框,其中包含新项目的设置。通过单击肯定按钮,我将一个新元素插入到数据库中,执行以下步骤:
1) 从对话框调用
viewModel.createItem()
2) 在视图模型中
fun createItem() {
return repository.insertItem(Item("${name.value}"))
}
3) 存储库看起来像
@Singleton
class Repository @Inject constructor(
private val appExecutors: AppExecutors,
private val itemDao: ItemDao
) {
fun insertItem(item: Item) {
appExecutors.diskIO().execute{ itemDao.insert(item) }
}
fun loadItemList() = itemDao.getItemList()
}
4) 道
@Dao
interface ItemDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insert(item: Item) : Long
@Query("SELECT * FROM item ORDER BY name")
fun getItemList() : LiveData<List<Item>>
}
5) 物品
@Entity (tableName = "item")
data class Item(
@PrimaryKey(autoGenerate = true) @ColumnInfo(name = "_id") val id: Long,
@ColumnInfo(name = "name") val name: String
) {
@Ignore
constructor(name: String) : this(0, name)
}
然后我想导航到插入项目的详细信息片段。所以我需要这个项目的 id,它是由 Room 返回的。但是如何从存储库中的执行方法返回 id?或者,也许您知道另一种方法。
附:我使用 Dagger 和所有架构组件库。
【问题讨论】:
标签: android android-room android-architecture-components