【问题标题】:Toolbar search with side menu带有侧边菜单的工具栏搜索
【发布时间】:2018-12-06 14:00:50
【问题描述】:

在使用工具栏搜索功能时,我遇到了两个问题。

第一个(美学)问题是进入或离开搜索模式时,工具栏会消失一会儿,导致屏幕闪烁。

第二个(功能性)问题是,与侧边菜单一起,指针拖动事件导致 Toolbar.java 的第 1302 行的 actionPerformed 方法中出现 NullPointerException。因此,在搜索模式下无法滚动。

这两个问题都可以使用下面的表格在模拟器和 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)

在 Toolbar.java 的这一行中 getComponentForm() 返回 null(因为工具栏没有父级):if (Display.getInstance().getImplementation().isScrollWheeling() || !enableSideMenuSwipe || getComponentForm().findCurrentlyEditingComponent() != null || getComponentForm().isEditing()) {

【问题讨论】:

  • 你能添加异常的完整堆栈跟踪吗?我猜你描述的闪烁是流入/流出搜索用户界面的动画。尝试在模拟器中打开慢动作,看看是否是这种情况以及是什么原因造成的。还要在可能看起来非常不同的设备上进行比较。
  • 我在上面的问题中添加了堆栈跟踪。我还打开了慢动作(顺便说一下不错的功能),进入或离开搜索模式时,原来的工具栏立即消失,新的工具栏从顶部慢慢下降。有没有办法禁用这个动画?
  • 我使用搜索命令在表单中添加了以下代码:@Override public void animateLayout(int duration) { revalidate(); }。它解决了闪烁的问题。这是解决这个问题的好方法吗?
  • 不是我会做的,但它会起作用并且目前不太可能与其他事物发生冲突。

标签: codenameone


【解决方案1】:

我在this git commit 中添加了解决此问题的方法。明天应该会更新。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-23
    • 2018-10-09
    • 1970-01-01
    • 2014-07-03
    相关资源
    最近更新 更多