2017-01-20 2 views
1

Я унаследовал некоторый код, поэтому у меня нет истинной свободы для его изменения. :(Invalidate не может вызвать onDraw при возврате к активности, которая имеет пользовательский вид

У меня есть основное действие, из которого вызывается другие действия (я буду ссылаться на них в качестве вспомогательных действий с этого момента). Всякий раз, когда один из них завершается, он вызывает завершение и возвращает данные в основное действие.

Каждое действие (в том числе основное) имеет верхнюю панель, в которой отображается пользовательский вид. Пользовательский вид содержит холст с рисунком, зависящим от состояния сети .. т.е. wifi/mobile и т. Д. ..

Поскольку данные «состояния» никогда не изменяются, они удерживаются в пределах одного элемента, и представление получает данные из синглтона, чтобы определить, что он рисует. Это работает без проблем, то есть данные всегда, как я ожидаю

Когда я впервые запускаю MainActivity, по мере изменения сети данные меняются, и каждый вызов «invalidate» view получает системный вызов «onDraw», как я ожидал.

В каждом из подпрограмм это снова верно.

По завершении вспомогательного действия и возврата к mainActivity вызовы invalidate больше не приводят к вызову onDraw.

Я уже давно это рассматриваю и просто не могу понять, что происходит не так.

В моем конструкторе у меня есть:

setWillNotDraw(false); 

Всякий раз, когда изменения данных следующие методы называются:

invalidate(); 
requestLayout(); 

Теперь, есть еще одна вещь ... по возвращении к деятельности в том, что немедленная точка, я обновляюсь, и это правильно выполняется, т. е. invalidate запускает вызов onDraw ... любые последующие изменения в сети (которые распространяются) не приводят к вызову onDraw.

Мне интересно, если это связано с тем, что вид отстранен. Я вижу, что вызывается «onDetachedFromWindow», однако триггер для этого - это разрушение субактивности, поэтому я не понимаю, почему это должно повлиять на MainActivity, но это единственное, о чем я могу думать.

Я надеюсь, что я предоставил достаточно информации для кого-то, чтобы помочь мне ...

+0

Не могли бы вы дать более подробную информацию о проблеме? Ваша субактивность останавливается, но вам нужно перерисовать ее, пока она скрывается? Или ваша основная деятельность перестает перерисовываться после возвращения из субактивности? –

+0

Привет Артем, Мой MainActivity прекращает перерисовки, когда он возвращается из subactivity .... Каждый SubActivity имеет свой собственный экземпляр зрения, и если он признан недействительным из subactivity MainActivity отказывается затем обрабатывать OnDraw. – greysqrl

+0

На самом деле, я думаю, что каждый вид НЕ является уникальным экземпляром ... из теста, который, кажется, имеет место. – greysqrl

ответ

1

Ну, в конце концов, мой ответ имеет очень мало общего с вопросом, и я думаю, это пример того, как проблема может быть решена путем возврата к абсолютным основам и проверки на очевидное.

Мои действия все наследуются от абстрактного действия. Внутри этой деятельности есть экземпляр представления. В представлениях, в которых у меня возникали проблемы, использовалось это заявление, а не их собственный экземпляр, поэтому поведение от одного действия затем оказывало влияние на другое непреднамеренно.

Итак, если бы я смог опубликовать весь код, я уверен, что кто-то еще заметил бы это, но, к сожалению, я не мог этого сделать.

Тем не менее, пока эта публикация не дает разрешения, которое поможет другим, возможно, оно говорит ... отступите назад и сначала проверьте очевидное!

Смежные вопросы