blackberry布局更改字段高度

blackberry布局更改字段高度,blackberry,layout,field,Blackberry,Layout,Field,我创建了一个自定义字段,用于从url加载图像。我想做的是让字段不占用任何空间,然后在加载图像时将其自身调整为图像的大小。我几乎做了所有的事情,但我不能想出一个办法,让布局重新完成后,图像加载。如果我事先指定图像的大小,它就可以工作。在父级上调用invalidateLayout将无法工作,因为屏幕可见,但仅调用invalidate不起任何作用。要调整字段大小,我必须执行哪些步骤 如果我可以在自定义视图上而不是在父视图上调用该方法,这也会更好,但这不是必需的 这适用于blackberry 4.5.0

我创建了一个自定义字段,用于从url加载图像。我想做的是让字段不占用任何空间,然后在加载图像时将其自身调整为图像的大小。我几乎做了所有的事情,但我不能想出一个办法,让布局重新完成后,图像加载。如果我事先指定图像的大小,它就可以工作。在父级上调用invalidateLayout将无法工作,因为屏幕可见,但仅调用invalidate不起任何作用。要调整字段大小,我必须执行哪些步骤

如果我可以在自定义视图上而不是在父视图上调用该方法,这也会更好,但这不是必需的


这适用于blackberry 4.5.0。

首先,您必须使父管理器无效,因为它确实需要自定义字段的新大小,以便正确地重新绘制整个管理器。(如果管理器中在自定义字段或滚动之后还有其他字段)

在我的脑海中,您可以尝试实施以下两种解决方案:

  • 当您的自定义字段下载完映像后,请调用父管理器以使其中的所有字段无效(您必须在自定义字段中保留对父管理器的引用)
--或--

  • 创建自定义字段对象,而不将其添加到管理器中。开始下载图像,完成后,调用特定于父级的方法,将自定义字段添加到管理器中(您仍然需要在自定义字段中保留对父级管理器的引用)(如果要在管理器上已存在的两个字段之间添加,可以使用insert)。这样,您就不必调整字段的大小,只需在准备显示字段时将其添加到管理器中
回答您的评论:

然后,您应该使用同步作用域:

synchronized(UiApplication.getUiApplication().getEventLock())) {  
    // UI Code here  
}  

基本上,在此范围内,您应该只使用invalidate,在调用之前在其他地方更改大小。

首先,您必须使父管理器无效,因为它确实需要自定义字段的新大小,以便正确地重新绘制整个管理器。(如果管理器中在自定义字段或滚动之后还有其他字段)

在我的脑海中,您可以尝试实施以下两种解决方案:

  • 当您的自定义字段下载完映像后,请调用父管理器以使其中的所有字段无效(您必须在自定义字段中保留对父管理器的引用)
--或--

  • 创建自定义字段对象,而不将其添加到管理器中。开始下载图像,完成后,调用特定于父级的方法,将自定义字段添加到管理器中(您仍然需要在自定义字段中保留对父级管理器的引用)(如果要在管理器上已存在的两个字段之间添加,可以使用insert)。这样,您就不必调整字段的大小,只需在准备显示字段时将其添加到管理器中
回答您的评论:

然后,您应该使用同步作用域:

synchronized(UiApplication.getUiApplication().getEventLock())) {  
    // UI Code here  
}  

基本上在这个范围内,在调用之前,您应该只在其他地方使用invalidate,do your size change。

我通过调整子对象的大小,设法使我的应用程序的一部分可以使用它。这两种方法的问题是,当在UI线程之外执行它们时,会导致崩溃。我只需调整子线程的大小,就可以在应用程序的某个部分实现这一点。这两种方法的问题是,在UI线程之外执行它们时,会导致崩溃