代码之家  ›  专栏  ›  技术社区  ›  MusiGenesis

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

  •  1
  • MusiGenesis  · 技术社区  · 14 年前

    我正在尝试下载图像并将其显示在5x5网格中,我希望每个图像在下载后立即显示出来。

    我有一个 VerticalFieldManager 我加了5个 HorizontalFieldManager 当我下载每张图片时(使用 HttpConnection )我将其转换为 Bitmap 然后把它放在 BitmapField 然后将字段添加到 水平场管理器 S.

    这是可行的,除了在下载了全部25张图片之前我看不到任何图片,在这一点上我看到了所有的图片。

    我试过打电话 invalidate() 在下载每一张图片后,所有相关内容都会显示出来,但似乎没有任何效果。

    2 回复  |  直到 11 年前
        1
  •  2
  •   Michael Donohue Reno    14 年前

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

    根据评论中的新信息编辑:

    HttpConnection 是阻塞的,因此需要在UI线程之外的线程上执行IO操作。您的应用程序下载图像的速度足够快,阻止用户界面线程不会杀死整个应用程序。如果连接速度慢,你的应用程序在下载时会被操作系统杀死。

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

        2
  •  2
  •   Nate    11 年前

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

    2)如果要添加位图字段,请执行以下操作:

    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
        }
    });