гибкий, как обновить уже созданный вид - PullRequest
2 голосов
/ 12 июля 2011

Как я могу обновить представление после определенного события?

У меня есть представление, содержащее несколько групп.Я хочу показать или скрыть некоторые группы.

Метод onCreationComplete () или initialize () работает только в начале создания представления.

Ответы [ 2 ]

5 голосов
/ 12 июля 2011

Попробуйте invalidateDisplayList() в представлении

Дайте мне знать, если это не поможет, и мы попробуем другие приемы.

1 голос
/ 13 июля 2011

Мне лично не нравится ответ, в котором говорится, чтобы вызвать invalidateDisplayList (извините, не обижайтесь, Нейт, ничего личного).Я чувствую, что это слишком расплывчато и не объясняет, что это делает под капотом, и, кроме того, вам не нужно вызывать это напрямую в случаях, подобных тому, который объясняется в вопросе ОП.Вы можете просто создать логические значения, которые можно связать для каждой из групп, которые вы хотите показать / скрыть, затем в обработчике событий установите для этих логических значений соответствующее значение, и, если они связаны с видимым, и включите в свойства макета контейнеров теконтейнеры будут внутренне вызывать invalidateDisplayList после вызова set visible и, следовательно, commitProperties.

Это в основном то, что происходит под капотом, насколько я понимаю: способ, которым это работает, заключается в том, что значения не фиксируются или не используются для обновления дисплея до тех пор, покаследующий кадр таким образом, он не увязнет, ​​делая ненужные вычисления макета.Таким образом, вы обновляете свойство bindable, которое запускает событие, которое вызывает уведомление в слушателе (в данном случае это функция, которая устанавливает свойство в вашем элементе управления), которое, в свою очередь, передает значение в элемент управления, который устанавливает внутренний флаг для обновлениясвойство и вызовы invalidateProperties.Когда он переходит к следующей перерисовке кадра, он видит, что флаг свойств загрязнен (true), а затем вызывает commitProperties, это вычисляет / устанавливает соответствующие значения (возможно, также делает недействительными затем «исправление» размера с помощью invalidateSize () и measure ()) ивызывает invalidateDisplayList, затем в течение того же кадра он видит, что флаг списка отображения загрязнен, поэтому он вызывает updateDisplayList, здесь он использует значения свойств для соответствующего рисования.

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

...