如何在Codename One的Container中实现搜索过滤器?
嘿,我来帮你搞定Codename One里Container按钮的搜索过滤功能!先给你梳理下核心思路:我们需要加一个搜索输入框,监听用户的输入变化,然后动态筛选出匹配关键词的按钮,显示出来,隐藏不匹配的。
完整实现代码
我把你的现有代码补全并加上过滤功能,你可以直接参考:
public void listMenu() { Dialog loading = new InfiniteProgress().showInfiniteBlocking(); loading.show(); final Form listMenu = new Form("List Menu"); listMenu.setLayout(new BoxLayout(BoxLayout.Y_AXIS)); // 1. 添加搜索输入框 TextField searchField = new TextField("", "Search menus..."); listMenu.add(searchField); Container list = new Container(new BoxLayout(BoxLayout.Y_AXIS)); listMenu.add(list); Button back = new Button("Back to Main Menu"); back.addActionListener(e -> { // 这里添加返回主菜单的逻辑 listMenu.back(); }); listMenu.add(back); // 存储所有菜单按钮的列表,方便后续过滤 ArrayList<Button> menuButtons = new ArrayList<>(); // 2. 从Parse获取数据并生成按钮(补全你的ParseQuery逻辑) ParseQuery<ParseObject> query = ParseQuery.getQuery("YourMenuClassName"); try { List<ParseObject> menuItems = query.find(); for (ParseObject item : menuItems) { String menuName = item.getString("menuName"); // 假设你的Parse字段是menuName Button menuBtn = new Button(menuName); menuBtn.addActionListener(e -> { // 添加按钮点击逻辑 Dialog.show("Selected", "You chose: " + menuName, "OK", null); }); list.add(menuBtn); menuButtons.add(menuBtn); } } catch (ParseException ex) { Dialog.show("Error", "Failed to load menus: " + ex.getMessage(), "OK", null); } finally { loading.dispose(); listMenu.show(); } // 3. 实现搜索过滤逻辑 searchField.addDataChangedListener((type, index) -> { String searchText = searchField.getText().trim(); for (Button btn : menuButtons) { boolean isMatch = StringUtil.containsIgnoreCase(btn.getText(), searchText); btn.setVisible(isMatch); } // 刷新Container的布局,让UI更新 list.revalidate(); }); }
关键部分解释
- 搜索输入框:用
TextField实现,提示用户输入搜索关键词 - 菜单按钮列表:把所有生成的按钮存在
menuButtons里,避免每次过滤都重新遍历Container的子组件,效率更高 - 过滤逻辑:监听搜索框的内容变化,用
StringUtil.containsIgnoreCase做不区分大小写的模糊匹配,设置按钮的可见性,最后调用revalidate()刷新Container的布局,确保UI及时更新 - 加载对话框:在finally块里关闭加载框,避免请求失败后加载框一直显示
如果你的按钮是手动添加而不是从Parse获取的,只需要把生成按钮的部分换成你自己的代码,然后把按钮加入menuButtons列表就可以啦!
内容的提问来源于stack exchange,提问作者Simple
相关产品推荐
相关产品推荐

