У меня есть фрагмент с RecyclerView и FloatingActionButton.При нажатии на клавишу FAB открывается диалоговое окно с настройками для нового элемента.Нажав на положительную кнопку, я вставляю новый элемент в базу данных, выполняя следующие шаги:
1) Вызов из диалога
viewModel.createItem()
2) В ViewModel
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)
}
А затем я хочу перейти кфрагмент детали для вставленного элемента.Поэтому мне нужен идентификатор этого элемента, который возвращается Room.Но как я могу вернуть идентификатор из метода execute в хранилище?Или, может быть, вы знаете другой способ сделать это.
Ps Я использую Dagger и все библиотеки компонентов архитектуры.