вьюхе Checkbox.
Юзер меняет стейт, вызывается checkedChange у VM, где в нашу LiveData сетится это значение, в итоге чекбокс получает стейт, о котором сам и сообщил.
Это логично, но нормально ли?
В мире стандартных View особо никак иначе не сделаешь)
в android data binding для большинства вьюх из коробки есть проверки, но его все недолюбливают
да норм фреймворк, чо
Два этих события не должны быть связаны друг с другом. Юзер нажимает чекбокс - меняется состояние у ВМ. Если кому-то ещё интересно изменение чекбокса, то он слушает LiveData. Зачем чекбокс слушает свою собственную LiveData?
Мне кажется ты меня специально преследуешь и троллишь
Вот тебе кейс: состояние чекбокса сохраняется в префах. И при повторном запуске экрана чекбокс восстанавливает свое состояние из LiveData
А мне кажется, что ты специально подписываешься на разные группы и задаешь там похожие вопросы. У тебя есть список тех, кто тебе может и кто не может отвечать, что ли?
Вероятно (вероятно!!!), инициализация при старте должна быть отделена от остальной логики. Общее правило: если приходится извращаться, значит, что-то делается не так. Нужно остановиться и подумать.
А мне кажется так и должно быть как он описывает, есть стейт и вью на него реагирует
это былобы актуально, если бы стейт сохранялся в одном месте, а так как он может быть как во View, так и во ViewModel - его приходится руками разграничивать: И либо как предложил Leonid - разделять его хранение руками; Либо дублировать его хранение;
нужно хранить стейт в одном месте. клик по чекбоксу -> ивент во viewModel. Она решает что делать на освновании стейта. И если нужно, меняет стейт. А чекбокс подписан на этот стейт и всегда отображает только его.
но в checkbox состояние тоже ведь хранит
надо сделать так, чтобы не хранил. А всегда отображал то состояние, которое VM сообщает
кастомный checkbox?
как пожелаете. но я не вижу в нем необходимости.
Вовсе нет, я рад любому ответу и спасибо тебе если ты правда хотел помочь, просто мы видимо друг друга не понимаем и очень сильно. Может я просто туплю, но я так и не понял, что ты пытался сказать, ну или я так фигово задачу обрисовал. Поэтому, чтобы сделать её максимально прозрачной, я сделал небольшой пример, надеюсь из него понятно что я имел ввиду. https://gist.github.com/FirstSpectr/378b0fab2b2265f04e0bc83d051ca445
Ваше решение тоже подойдет, если чекбокс защищен от бесконечного цикла изменения его check state и последующего события от LiveData. Как бы не совсем прямо получается, но зато проверка делается штатными средствами чекбокса, что есть хорошо.
Обсуждают сегодня