void invalidate()
Invalidates the entire screen.
void invalidateLayout()
Invalidates this screen's layout (including all controlled fields).
javadoc 没有多大帮助。你能告诉我为什么我们需要invalidateLayout()吗?
void invalidate()
Invalidates the entire screen.
void invalidateLayout()
Invalidates this screen's layout (including all controlled fields).
javadoc 没有多大帮助。你能告诉我为什么我们需要invalidateLayout()吗?
根据您构建 UI 的方式,当您希望更改显示时,您可能对无效或更新布局感兴趣。
如果您的 UI 由标准Field
对象(如TextField
、 或ButtonField
、 or )组成BrowserField
,没有太多自定义,那么定义 UI 外观的工作主要在于这些字段的布局方式。 布局是指设置字段的大小及其位置。
有时,您会有一个需要在较低级别进行处理的 UI。例如,您可能会做一些自定义绘画,其中涉及绘制线条、填充区域、绘制渐变等。这项工作通常以Field
对象的paint()
方法完成。有时,您在其他地方也有绘图代码,例如drawFocus()
or paintBackground()
。
如果你想触发重绘,它调用你的自定义paint()
方法,那么你想用invalidate()
它来实现。
如果你想触发一个新的布局,它以特定的大小或位置排列子字段,那么invalidateLayout()
可以用于那个。
但是,我会注意到这invalidateLayout()
是Screen
类中的一个方法。如果您使用 RIMScreen
子类,例如MainScreen
or FullScreen
,那么它们带有自己的顶级委托 Manager
对象。我相信调用Screen.invalidateLayout()
将触发该sublayout()
内置的方法Manager
被调用。那可能不是你真正想要的。
除非您像这样实现自己的Screen
子类:
public class MyScreen extends Screen {
public MyScreen() {
super(new MyCustomManager());
}
}
您可能没有sublayout()
自己实现该委托管理器的代码(包括 )。
我发现当我想强制sublayout()
再次被调用时,我使用updateLayout() 方法触发它,而不是invalidateLayout()
. 此外,与 的方法相反,invalidateLayout()
它适用于所有类和类,因此您可以只选择要刷新的 UI 元素树的特定部分。但是,这只是我的经验。Screen
updateLayout
Manager
Field