【问题标题】:Codenameone refresh list of images without reloading the pageCodenameone 在不重新加载页面的情况下刷新图像列表
【发布时间】:2016-11-24 12:49:24
【问题描述】:

我正在开发一个需要创建动态图片库的应用程序,该图片库会在几分钟后刷新。当刷新发生时,应该会发生三件事而无需重新加载页面

1) 应删除过时的图像 2)应添加新图像 3)非过时的图像应该保留(不重新加载) 4) 图片应该并排堆叠,因为它主要用于平板电脑

我正在查看 Boxlayout 或 FlowLayout,我可以添加图像,但我不确定如何动态删除它。我能够为图像组件设置 UUID,但无法获取基于 UUID 的组件来删除它.如何根据添加到表单的 UUID 获取组件? 这是正确的方法吗?或者已经有内置组件可以做到这一点。

我看到了这个
How to add dynamic data in the renderer created using UI builder?

But I also read using List is discouraged 

https://www.codenameone.com/javadoc/com/codename1/ui/list/package-summary.html

【问题讨论】:

    标签: codenameone


    【解决方案1】:

    用BoxLayout.Y_AXISContainer 来做这件事其实很简单。当您创建要添加到框布局的图像组件时,请执行以下操作:

    myImageComponent.putClientProperty("imageId", imageId);
    

    然后,当您有刷新列表的回调时,只需执行以下操作:

    for(Component cmp : parentContainer) {
        String id = (String)myImageComponent.getClientProperty("imageId");
        if(!existsInNewList(id)) {
           cmp.remove();
        }
    }
    

    更新完容器后,只需调用 animateLayout(200) 或 revalidate() 即可刷新 UI。

    【讨论】:

    • 这行得通,animatLayout(200) 似乎提供了更好的 UI 体验
    • 是的,这只是您可以用 Container 做的事情之一,而您不能用 List 做...仅供参考,当答案正确时,您应该接受它并理想地支持它,这会给您和回答对 SO 非常有用的点的人。您可以通过单击答案旁边的复选框来接受答案。
    • 一个后续问题,获取数据的最佳实践是什么。该应用程序将运行(不在后台)并且图像将每 15 秒拉一次。我正在考虑使用 fetch 但我阅读了文档,在 IOS 中它只是视觉通知并且需要人工交互。 “iiOS 只会将推送通知发送到应用程序,如果它正在运行或者如果用户单击了推送通知弹出窗口!”。投票是更好的选择还是有其他方法?
    • 没有理由将它用于在前台运行的东西。只需使用连接请求并获取图像。当连接请求的postResponse 回调完成时,检查是否经过了 15 秒,如果是,则再次发出请求,如果没有,则为剩余的持续时间安排一个计时器。请注意,这可能会消耗电池电量,因此如果 Display.isMinimized() 返回 true,我建议暂停它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-27
    • 2013-08-20
    • 2017-08-13
    相关资源
    最近更新 更多