如何在循环内的活动期间刷新字段?

时间:2010-11-10 04:50:35

标签: blackberry

我正在尝试下载图像并以5x5网格显示它们,我希望每个图像在下载后立即显示。

我有一个VerticalFieldManager,我添加了5 HorizontalFieldManager s。当我下载每张图片时(使用HttpConnection),我将其转换为Bitmap,然后将其放入BitmapField,然后将该字段添加到其中一个HorizontalFieldManager。< / p>

这是有效的,只是在我下载所有25张照片之前我都没有看到任何图像,此时我看到了所有图像。

我已尝试在下载每张图片后调用invalidate()所涉及的所有内容,但似乎没有任何效果。

2 个答案:

答案 0 :(得分:2)

您是否正在从UI事件线程下载?如果没有,下载将阻止所有UI更新,直到完成,这将解释您看到的行为。

根据评论中的新信息进行修改:

HttpConnection正在阻塞,因此您需要在UI线程之外的线程上执行IO操作。您的应用程序正在快速下载图像,阻止UI线程不会杀死整个应用程序。在连接速度较慢时,您的应用程序将在执行这些下载时被操作系统杀死。

  

此接口执行阻止输入和输出操作。如果此接口的实现从主事件线程中打开连接,则应用程序将锁定。通过从与主事件线程分开的线程中打开连接来阻止应用程序锁定。有关详细信息,请参阅连接器。

答案 1 :(得分:2)

1)您应该在单独的(非UI)BitmapField上下载并创建Thread

2)当您要添加BitmapField时,请执行以下操作:

final BitmapField b = ... // your code to get the BitmapField
UiApplication.getUiApplication().invokeAndWait(new Runnable() {
    public void run() {
        yourContainer.add(b);
        yourContainer.invalidate(); // may not need this - try comment out
    }
});