blackberry - Screen.invalidate() 和 Screen.invalidateLayout() 有什么区别

标签 blackberry blackberry-jde

void invalidate() 
      Invalidates the entire screen.


void invalidateLayout() 
      Invalidates this screen's layout (including all controlled fields).

javadoc 没有多大帮助。你能告诉我为什么我们需要 invalidateLayout() 吗?

最佳答案

根据您构建 UI 的方式,当您希望更改显示时,您可能会对无效更新布局感兴趣。

如果您的 UI 由标准 Field 对象组成,例如 TextFieldButtonFieldBrowserField >,如果没有太多自定义,那么定义 UI 外观的工作主要在于这些字段的布局方式。布局是指设置字段的大小及其位置。

有时,您会遇到需要在较低级别进行处理的 UI。例如,您可能会进行一些自定义绘画,其中涉及绘制线条、填充区域、绘制渐变等。这项工作通常在 Field 对象的 paint() 方法中完成。有时,您还可以在其他地方使用绘图代码,例如 drawFocus()paintBackground()

如果您想触发重新绘制,从而调用您的自定义 paint() 方法,那么您需要使用 invalidate() 来实现这一点。

如果您想触发一个新的布局,以特定的大小或位置排列子字段,则可以使用 invalidateLayout() 来实现。

但是,我会注意到 invalidateLayout()Screen 类中的一个方法。如果您使用 RIM Screen 子类,例如 MainScreenFullScreen,那么它们会带有自己的顶级代理 Manager 对象。我相信调用 Screen.invalidateLayout() 将触发调用内置 Manager 上的 sublayout() 方法。这可能不是您真正想要的。

除非您像这样实现自己的 Screen 子类:

public class MyScreen extends Screen {

   public MyScreen() {
       super(new MyCustomManager());
   }
}

您可能没有自己实现该委托(delegate)管理器的代码(包括 sublayout())。

我发现,当我想强制再次调用 sublayout() 时,我会使用 updateLayout() method 触发它。 ,而不是 invalidateLayout()。此外,与 invalidateLayout()(这是 Screen 的一种方法)相反,updateLayout 可用于所有 Manager > 和 Field 类,因此您可以仅选择要刷新的 UI 元素 tree 的特定部分。但是,这只是我的经验。

Here's some comments on the BlackBerry forums on this topic

关于blackberry - Screen.invalidate() 和 Screen.invalidateLayout() 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13735770/

相关文章:

blackberry - ListField 中文本右侧的复选框

graphics - 黑莓-如何调整图像大小?

android - 使用Eclipse进行BB和Android开发

c# - 我可以在 Windows 7 上使用 C# .NET 开发黑莓应用程序吗

java - 在应用程序启动黑莓时运行多个网址

blackberry - IOException Radio 在 BlackBerry 上关闭且内存不足

java - 在 Blackberry App 中启动 URL

Java Blackberry - 分配 UiApplication.getUiApplication()

servlets - Tomcat7 HTTP 状态 500 - Servlet 执行引发异常

blackberry-eclipse-plugin - 没有安装 BlackBerry JRE?