Ситуация: храню лайвдату в одном объекте, и может быть такая ситуация, что активити пересоздается, а лайвдата остаётся со значением. Для того, что бы отобразить данные для активити, я превращаю лайвдату в текст (через Transformations.map() ), но если активити пересоздать, Transformations не тригерится (ибо лайвдата до сих пор хранит значение), Есть какая-то возможность тригернуть лайвдату снова в Transformations.map() или как-то по-другому её обработать во ViewModel?
Покажи код (скинь например на hatebin)
По идее, когда активити пересоздается и снова подписывается на LiveData, то она должна получить текущее значение из LiveData.
Ну как такового observe именно первой лайвдаты не происходит. Её мы используем только для трансформаций, на которые уже подписывается View. Первая лайвдата — это состояние, например "не готово". Вторая — это трансформация первой в картинку, например. Вью уже подписывается на картинку. Так как первая лайвдата не пересоздается, и ее значение остаётся прежним, например "не готово", то трансформация в картинку и не происходит. Вот такая вот ситуевина
Просто я хочу делать трансформацию во ViewModel, а View уже подписывать на нее. Что бы во View не выносить логику трансформации
У вас что-то типа такого? val userLiveData: LiveData<User> = UserLiveData() val userName: LiveData<String> = Transformations.map(userLiveData) { user -> "${user.name} ${user.lastName}" }
Условно да. UserLiveData в одном объекте, а userName лежит во ViewModel активности. Так как данные юзера не обновились, то и userName не тригерится первый раз.
В теории изменение user LiveData должно изменять user Name, то есть подписчики и того и другого должны быть уведомлены. Может это глючить из-за того, что эти две LiveData живут в разных местах?
Я просто читал, что при использовании Transformations.map она тригерится только на изменение значения лайвдаты Но значение у нас остаётся прежним, и в этом вся проблема)
Я так понял, что если трансформация одной LiveData зависит от другой LiveData, то их последние значения должны автоматически синхронизироваться. Тогда подписка будет возвращать текущее значение.
Понял, ладно, спасибо, я ещё что-то подумаю)
Вообще это интересно, нужно будет поиграться с этим. Пока ещё не было необходимости.
Обсуждают сегодня