Как получить имя нового элемента при обновлении в комнате?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как получить имя нового элемента при обновлении в комнате?

Сообщение Anonymous »

У меня есть 5 объектов в комнате, и я хочу обновить имя одного элемента. Вот что я пробовал:

Код: Выделить всё

interface ItemDao {
@Query("SELECT * FROM item_table")
fun getItems(): Flow

@Update
fun updateItem(item: Item)
}
Мой репозиторий очень простой:

Код: Выделить всё

interface ItemRepository {
fun getItems(): Flow

fun updateItem(item: Item)
}
Внутри ViewModel я делаю:

Код: Выделить всё

class ItemsViewModel @Inject constructor(
private val repo: ItemRepository
) : ViewModel() {
private val _result = MutableStateFlow(Result.Loading)
val result: StateFlow = _result
.onStart {
getItems()
}.stateIn(
viewModelScope,
SharingStarted.WhileSubscribed(5_000L),
Result.Loading
)

private fun getItems() = viewModelScope.launch {
try {
repo.getItems().collect { items ->
_result.value = Result.Success(items)
}
} catch (e: Exception) {
_result.value = Result.Error(e)
}
}
И внутри составного элемента я делаю:

Код: Выделить всё

val result = viewModel.result.collectAsStateWithLifecycle().value

Scaffold(
topBar = {
//
},
content = {
when(result) {
is Result.Loading -> CircularProgressIndicator()
is Result.Success -> {
items(
items = result.items
) { item ->
Text(item.name)
}
}
is Result.Error -> print(result.e)
}
}
)
Когда я открываю приложение, я правильно получаю все данные из Room. Когда я обновляю имя первого элемента, я не вижу обновленное имя, пока не закрою и не открою приложение снова. Почему состояние не меняется, когда я обновляю имя в комнате? Как это решить?

Подробнее здесь: https://stackoverflow.com/questions/790 ... te-in-room
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»