Codenameone Codename One-以编程方式在搜索栏中开始编辑

Codenameone Codename One-以编程方式在搜索栏中开始编辑,codenameone,Codenameone,当表单显示时,我需要以编程方式在搜索栏中开始编辑。因为我没有找到任何API,所以我在表单中编写了以下代码: addShowListener(l -> { for (int i = 0; i <= getToolbar().getComponentCount(); i++) { if (getToolbar().getComponentAt(i) instanceof Button) { Button btn =

当表单显示时,我需要以编程方式在搜索栏中开始编辑。因为我没有找到任何API,所以我在表单中编写了以下代码:

 addShowListener(l -> {
        for (int i = 0; i <= getToolbar().getComponentCount(); i++) {
            if (getToolbar().getComponentAt(i) instanceof Button) {
                Button btn = (Button) getToolbar().getComponentAt(i);
                if (btn.getUIID().equals("TitleCommand")) {
                    btn.pressed();
                    btn.released();
                }
                if (btn.getUIID().equals("BackCommand")) {

                    btn.addActionListener(ev -> {
                        backForm.showBack();
                    });
                }
            }
        }

    });
addShowListener(l->{
对于(int i=0;i{
backForm.showBack();
});
}
}
}
});
此代码的问题:

  • 它依赖于方法
    Form.getToolbar().addSearchCommand
    的当前实现,该方法在工具栏中创建了一个带有UIID
    TitleCommand
    (右侧的搜索图标)的按钮和另一个带有UIID
    BackButton
    (左侧的箭头)的按钮
  • 添加到“后退”按钮的“我的监听器”不起作用:它没有显示
    backForm
    ,而是显示没有搜索栏的工具栏

所以。。。我的问题是如何用更好的编码实现我所需要的。是否需要执行RFE以公开类似于
Toolbar.startSearchEditingAsync()的API
?如何更改backButton的默认actionListener?

如果需要在显示之前启动它,则可能需要类似于
Form.setEditOnShow()的更精细的操作

在我开始时,这在我的脑海中似乎有点简单,但一旦开始,我就必须完成,所以我在这里实现了这一点:


它应该可以工作,如果有问题请告诉我。

做得很好,谢谢!我将对你关于“后退”按钮的一个(小)问题进行评论。