Одно кодовое имя как выполнить поиск в списке контейнеров?

#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();
 

Результаты поиска