#codenameone
Вопрос:
Я создал список фильмов и, используя цикл, я дал каждому фильму новые контейнеры, поэтому я отображаю список контейнеров со всеми фильмами в своей базе данных, могу ли я динамически искать один фильм, используя что-то вроде действия onKeyreleased в строке поиска и обновляю список контейнеров для отображения контейнера с искомым фильмом.. Поиск в настоящее время работает для меня с помощью actionlistener, который запускается только нажатием клавиши Enter, и результаты я передаю в новую форму..
Ответ №1:
Конечно, панель инструментов поддерживает режим поиска. Смотрите этот пример кода, который выполняет поиск по всем контактам на вашем телефоне. Он немного старый, но должен работать, он скопирован с javadoc:
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 amp;amp; line1.toLowerCase().indexOf(text) > -1 ||
line2 != null amp;amp; line2.toLowerCase().indexOf(text) > -1;
mb.setHidden(!show);
mb.setVisible(show);
}
hi.getContentPane().animateLayout(150);
}
}, 4);
hi.show();