首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >集装箱集上的CodenameOne滤波器优化

集装箱集上的CodenameOne滤波器优化
EN

Stack Overflow用户
提问于 2016-09-28 06:05:41
回答 1查看 47关注 0票数 1

在我的应用程序中,我有一个搜索框,允许用户在输入时进行过滤。由于某些原因,在执行筛选时,我无法正确显示InfinteProgress。这是我的密码:

通行证1

代码语言:javascript
复制
public void renderForumList(){
        try{
            magnify = mStateMachine.findForumSearchIcon(form);
        }catch(NullPointerException ex){
            System.out.println("User typed additional character in search term before previous term finished executing");
        }
        InfiniteProgress infi = new InfiniteProgress();
        magnify.getParent().replace(magnify, infi, null);
        Display.getInstance().invokeAndBlock(new Runnable() {
            @Override
            public void run() {
                for (int i = 0;i < containerStates.length;i++){
                    if(containerStates[i] != listItems[i].isVisible()){
                        listItems[i].setHidden(!containerStates[i]);
                        listItems[i].setVisible(containerStates[i]);
                    }
                }
                Display.getInstance().callSerially(new Runnable() {
                    @Override
                    public void run() {
                     mStateMachine.findForumsListComponent(form).animateLayout(200);
                    mStateMachine.findContainer2(form).replace(infi, magnify, null);
                    }
                });
            }
        });
}

在这个版本中,无限的进步出现在正确的位置,但它不会旋转。

通行证2

代码语言:javascript
复制
public void renderForumList(){
        try{
            magnify = mStateMachine.findForumSearchIcon(form);
        }catch(NullPointerException ex){
            System.out.println("User typed additional character in search term before previous term finished executing");
        }
        InfiniteProgress infi = new InfiniteProgress();
        magnify.getParent().replace(magnify, infi, null);
                for (int i = 0;i < containerStates.length;i++){
                    if(containerStates[i] != listItems[i].isVisible()){
                        listItems[i].setHidden(!containerStates[i]);
                        listItems[i].setVisible(containerStates[i]);
                    }
                }
        mStateMachine.findForumsListComponent(form).animateLayout(200);
        mStateMachine.findContainer2(form).replace(infi, magnify, null);
                    }
            }
}

在这个版本中,放大镜图标只是短暂地闪烁,但是InfiniteProgress旋转器是不可见的。

我在模拟器和Android设备上都得到了同样的结果。

在搜索过程中,我如何让InfiniteProgress旋转?

EN

回答 1

Stack Overflow用户

发布于 2016-09-29 06:53:25

invokeAndBlock打开一个新线程,因此在单独的线程上访问UI组件时违反了EDT。

尝试使用callSerially来将下面的代码推迟到下一个EDT周期,尽管我不确定这会有帮助,因为EDT上的一切仍然在发生。

或者,我猜isVisible方法需要时间,所以您可以将该调用单独包含在invokeAndBlock中。

要了解invokeAndBlock,请参阅开发人员指南https://www.codenameone.com/manual/edt.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39739186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档