Поиск панели инструментов с боковым меню - PullRequest
0 голосов
/ 04 декабря 2018

При использовании функции поиска на панели инструментов я сталкиваюсь с двумя проблемами.

Первая (эстетическая) проблема заключается в том, что при входе или выходе из режима поиска панель инструментов на мгновение исчезает, что приводит к мерцанию на экране.screen.

Вторая (функциональная) проблема заключается в том, что вместе с боковым меню событие перетаскивания указателя приводит к исключению NullPointerException в методе actionPerformed в строке 1302 Toolbar.java.В результате прокрутка невозможна в режиме поиска.

Обе проблемы можно воспроизвести в симуляторе и на Android с помощью приведенной ниже формы.

С уважением, Франс.

import com.codename1.ui.FontImage;
import com.codename1.ui.Form;
import com.codename1.ui.TextArea;
import com.codename1.ui.events.ActionEvent;
import com.codename1.ui.layouts.BorderLayout;

public class ToolbarSearchForm extends Form
{
    public ToolbarSearchForm()
    {
        super("Toolbar search", new BorderLayout());
        getToolbar().addSearchCommand(e -> filter((String)e.getSource()));
        getToolbar().addMaterialCommandToSideMenu("Settings", FontImage.MATERIAL_SETTINGS, this::settingsAction);
        TextArea text = new TextArea(100, 100);
        text.getAllStyles().setFgColor(0xFF000000); 
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 100; i++)
        {
            sb.append(i + " Hello World!\n");
        }
        text.setText(sb.toString());
        add(BorderLayout.CENTER, text);
    }

    private void filter(String filter)
    {
        System.out.println(filter);
    }

    private void settingsAction(ActionEvent e)
    {
        System.out.println(e);
    }
}

Полная трассировка стека:

java.lang.NullPointerException
at com.codename1.ui.Toolbar$4.actionPerformed(Toolbar.java:1302)
at com.codename1.ui.util.EventDispatcher.fireActionSync(EventDispatcher.java:459)
at com.codename1.ui.util.EventDispatcher.fireActionEvent(EventDispatcher.java:362)
at com.codename1.ui.Form.pointerDragged(Form.java:3146)
at com.codename1.ui.Display.handleEvent(Display.java:2118)
at com.codename1.ui.Display.edtLoopImpl(Display.java:1051)
at com.codename1.ui.Display.mainEDTLoop(Display.java:969)
at com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:120)
at com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176)
java.lang.NullPointerException
at com.codename1.ui.Toolbar$4.actionPerformed(Toolbar.java:1302)
at com.codename1.ui.util.EventDispatcher.fireActionSync(EventDispatcher.java:459)
at com.codename1.ui.util.EventDispatcher.fireActionEvent(EventDispatcher.java:362)
at com.codename1.ui.Form.pointerDragged(Form.java:3146)
at com.codename1.ui.Display.handleEvent(Display.java:2118)
at com.codename1.ui.Display.edtLoopImpl(Display.java:1051)
at com.codename1.ui.Display.flushEdt(Display.java:826)
at com.codename1.ui.Form.showModal(Form.java:2098)
at com.codename1.ui.Dialog.showModal(Dialog.java:1137)
at com.codename1.ui.Dialog.show(Dialog.java:582)
at com.codename1.ui.Dialog.showPackedImpl(Dialog.java:1433)
at com.codename1.ui.Dialog.showPacked(Dialog.java:1349)
at com.codename1.ui.Dialog.showImpl(Dialog.java:1093)
at com.codename1.ui.Dialog.show(Dialog.java:1071)
at com.codename1.ui.Dialog.show(Dialog.java:1027)
at com.codename1.ui.Dialog.show(Dialog.java:793)
at com.codename1.ui.Dialog.show(Dialog.java:746)
at com.codename1.ui.Dialog.show(Dialog.java:711)
at com.codename1.ui.Dialog.show(Dialog.java:652)
at com.codename1.ui.Dialog.show(Dialog.java:807)
at com.codename1.ui.Display.mainEDTLoop(Display.java:982)
at com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:120)
at com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176)

getComponentForm () возвращает значение null (поскольку на панели инструментов нет родителя) в этой строке Toolbar.java: if (Display.getInstance().getImplementation().isScrollWheeling() || !enableSideMenuSwipe || getComponentForm().findCurrentlyEditingComponent() != null || getComponentForm().isEditing()) {

1 Ответ

0 голосов
/ 06 декабря 2018

Я добавил обходной путь для этой проблемы в this git commit .Это должно быть в обновлении завтра.

...