codenameone中设备上的下拉错误
我正在我的应用程序中实现落水淹没功能。它是使用包含元素列表的容器实现的。 假设下拉列表中有以下项目aa1、aa2、aa3、aa4、aa5等。若我搜索为“aa”,它会显示从“aa”开始的项目,若我从列表中选择aa5,它会接受aa1并显示它。但是,如果我滚动项目并选择其工作良好。这个问题只发生在iOS设备上,在模拟器上工作得很好。 第一张图片描述了下拉列表的样子,在第二张图片中,如果我搜索“ee”,它会给出以“ee”开头的项目列表。如果我选择“ee5”,它将设置为ee1,如图3所示。问题只出现在设备上。有解决办法吗 所以,请让我知道这有什么问题 谢谢 [![在此处输入图像描述][1][1] //使用多按钮实现的新代码codenameone中设备上的下拉错误,codenameone,Codenameone,我正在我的应用程序中实现落水淹没功能。它是使用包含元素列表的容器实现的。 假设下拉列表中有以下项目aa1、aa2、aa3、aa4、aa5等。若我搜索为“aa”,它会显示从“aa”开始的项目,若我从列表中选择aa5,它会接受aa1并显示它。但是,如果我滚动项目并选择其工作良好。这个问题只发生在iOS设备上,在模拟器上工作得很好。 第一张图片描述了下拉列表的样子,在第二张图片中,如果我搜索“ee”,它会给出以“ee”开头的项目列表。如果我选择“ee5”,它将设置为ee1,如图3所示。问题只出现在设备
final String[] listItems = model.getItems();
Display.getInstance().callSerially(() ->{
multiButton= new MultiButton();
multiButton.setTextLine1(s);
dialog.add(multiButton);
multiButton.addActionListener(e -> Log.p("you picked " + multiButton.getSelectCommandText(), Log.ERROR));
}
dialog.revalidate();
});
我建议使用
容器
和简单的布局搜索,如下面的代码所示。以下代码取自:
那代码看起来怎么样?这些是您编写的组件,而不是内置组件,因此我假设在这一过程中会发生一些事情failed@ShaiAlmog,我添加了实现此功能的代码。如果我设置itemList.setFireOnClick(true),它从列表中选择第一项。但如果为false,则会在单击两次后选择该项目。请为此提供任何解决方法。谢谢,我要找的是过滤代码,你说这个bug就在这里。您似乎正在使用
列表
,尽管我们建议您避免使用它@ShaiAlmog感谢您的解决方案。我现在使用Multibutton实现,但每当我从下拉列表中选择项时,它只返回我上次输入的值。我用于实现的代码如下。之所以发生这种情况,是因为您将所有按钮存储到一个全局按钮,而不是使用新按钮的本地引用。
final String[] listItems = model.getItems();
Display.getInstance().callSerially(() ->{
multiButton= new MultiButton();
multiButton.setTextLine1(s);
dialog.add(multiButton);
multiButton.addActionListener(e -> Log.p("you picked " + multiButton.getSelectCommandText(), Log.ERROR));
}
dialog.revalidate();
});
Image duke = null;
try {
duke = Image.createImage("/duke.png");
} catch(IOException err) {
Log.e(err);
}
int fiveMM = Display.getInstance().convertToPixels(5);
final Image finalDuke = duke.scaledWidth(fiveMM);
Toolbar.setGlobalToolbar(true);
Form hi = new Form("Search", BoxLayout.y());
hi.add(new InfiniteProgress());
Display.getInstance().scheduleBackgroundTask(()-> {
// this will take a while...
Contact[] cnts = Display.getInstance().getAllContacts(true, true, true, true, false, false);
Display.getInstance().callSerially(() -> {
hi.removeAll();
for(Contact c : cnts) {
MultiButton m = new MultiButton();
m.setTextLine1(c.getDisplayName());
m.setTextLine2(c.getPrimaryPhoneNumber());
Image pic = c.getPhoto();
if(pic != null) {
m.setIcon(fill(pic, finalDuke.getWidth(), finalDuke.getHeight()));
} else {
m.setIcon(finalDuke);
}
hi.add(m);
}
hi.revalidate();
});
});
hi.getToolbar().addSearchCommand(e -> {
String text = (String)e.getSource();
if(text == null || text.length() == 0) {
// clear search
for(Component cmp : hi.getContentPane()) {
cmp.setHidden(false);
cmp.setVisible(true);
}
hi.getContentPane().animateLayout(150);
} else {
text = text.toLowerCase();
for(Component cmp : hi.getContentPane()) {
MultiButton mb = (MultiButton)cmp;
String line1 = mb.getTextLine1();
String line2 = mb.getTextLine2();
boolean show = line1 != null && line1.toLowerCase().indexOf(text) > -1 ||
line2 != null && line2.toLowerCase().indexOf(text) > -1;
mb.setHidden(!show);
mb.setVisible(show);
}
hi.getContentPane().animateLayout(150);
}
}, 4);
hi.show();