Я унаследовал некоторый код, поэтому у меня нет истинной свободы для его изменения. :(Invalidate не может вызвать onDraw при возврате к активности, которая имеет пользовательский вид
У меня есть основное действие, из которого вызывается другие действия (я буду ссылаться на них в качестве вспомогательных действий с этого момента). Всякий раз, когда один из них завершается, он вызывает завершение и возвращает данные в основное действие.
Каждое действие (в том числе основное) имеет верхнюю панель, в которой отображается пользовательский вид. Пользовательский вид содержит холст с рисунком, зависящим от состояния сети .. т.е. wifi/mobile и т. Д. ..
Поскольку данные «состояния» никогда не изменяются, они удерживаются в пределах одного элемента, и представление получает данные из синглтона, чтобы определить, что он рисует. Это работает без проблем, то есть данные всегда, как я ожидаю
Когда я впервые запускаю MainActivity, по мере изменения сети данные меняются, и каждый вызов «invalidate» view получает системный вызов «onDraw», как я ожидал.
В каждом из подпрограмм это снова верно.
По завершении вспомогательного действия и возврата к mainActivity вызовы invalidate больше не приводят к вызову onDraw.
Я уже давно это рассматриваю и просто не могу понять, что происходит не так.
В моем конструкторе у меня есть:
setWillNotDraw(false);
Всякий раз, когда изменения данных следующие методы называются:
invalidate();
requestLayout();
Теперь, есть еще одна вещь ... по возвращении к деятельности в том, что немедленная точка, я обновляюсь, и это правильно выполняется, т. е. invalidate запускает вызов onDraw ... любые последующие изменения в сети (которые распространяются) не приводят к вызову onDraw.
Мне интересно, если это связано с тем, что вид отстранен. Я вижу, что вызывается «onDetachedFromWindow», однако триггер для этого - это разрушение субактивности, поэтому я не понимаю, почему это должно повлиять на MainActivity, но это единственное, о чем я могу думать.
Я надеюсь, что я предоставил достаточно информации для кого-то, чтобы помочь мне ...
Не могли бы вы дать более подробную информацию о проблеме? Ваша субактивность останавливается, но вам нужно перерисовать ее, пока она скрывается? Или ваша основная деятельность перестает перерисовываться после возвращения из субактивности? –
Привет Артем, Мой MainActivity прекращает перерисовки, когда он возвращается из subactivity .... Каждый SubActivity имеет свой собственный экземпляр зрения, и если он признан недействительным из subactivity MainActivity отказывается затем обрабатывать OnDraw. – greysqrl
На самом деле, я думаю, что каждый вид НЕ является уникальным экземпляром ... из теста, который, кажется, имеет место. – greysqrl