void invalidate()
Invalidates the entire screen.
void invalidateLayout()
Invalidates this screen's layout (including all controlled fields).
Джавадок мало помогает. Не могли бы вы сказать мне, зачем нам недействительный макет ()?
void invalidate()
Invalidates the entire screen.
void invalidateLayout()
Invalidates this screen's layout (including all controlled fields).
Джавадок мало помогает. Не могли бы вы сказать мне, зачем нам недействительный макет ()?
В зависимости от того, как вы строите свой пользовательский интерфейс, вам может понадобиться аннулировать или обновить макет, когда вы хотите изменить отображение.
Если у вас есть пользовательский интерфейс, состоящий из стандартных объектов Field
, таких как TextField
, или ButtonField
, или BrowserField
, без особой настройки, то работа по определению того, как выглядит пользовательский интерфейс, в основном заключается в том, как эти поля расположены размещены. . Макет относится к настройке размера полей и их положения.
Иногда у вас будет пользовательский интерфейс, в котором вам нужно иметь дело на более низком уровне. Например, вы можете выполнить некое пользовательское рисование, которое включает в себя рисование линий, заливки областей, рисование градиентов и т. д. Эта работа обычно выполняется в методе paint()
объекта Field
. Иногда у вас также есть код рисования в других местах, таких как drawFocus()
или paintBackground()
.
Если вы хотите инициировать перерисовку, которая вызывает ваш пользовательский метод paint()
, то вы хотите использовать invalidate()
, чтобы это произошло.
Если вы хотите запустить новый макет, который упорядочивает дочерние поля с определенными размерами или позициями, то для этого можно использовать invalidateLayout()
.
Однако отмечу, что invalidateLayout()
— это метод класса Screen
. Если вы используете подкласс Screen
RIM, например MainScreen
или FullScreen
, то они поставляются со своими собственными объектами делегата Manager
верхнего уровня. Я считаю, что вызов Screen.invalidateLayout()
приведет к вызову метода sublayout()
для этого встроенного Manager
. Это может быть не то, чего вы действительно хотите.
Если вы не реализуете свой собственный подкласс Screen
следующим образом:
public class MyScreen extends Screen {
public MyScreen() {
super(new MyCustomManager());
}
}
вы, вероятно, не реализуете код (включая sublayout()
) для этого менеджера делегатов самостоятельно.
Я обнаружил, что когда я хочу снова вызвать sublayout()
, я запускаю это с помощью метод updateLayout(), а не invalidateLayout()
. Кроме того, в отличие от invalidateLayout()
, который является методом Screen
, updateLayout
доступен для всех классов Manager
и Field
, поэтому вы можете выбрать только определенную часть дерева элемента пользовательского интерфейса, которую хотите обновить. . Но, это только мой опыт.
Вот несколько комментариев на форумах BlackBerry. по этой теме