为啥我不能选择侧面菜单中的第一项?
Posted
技术标签:
【中文标题】为啥我不能选择侧面菜单中的第一项?【英文标题】:Why can't I select the first item in the side menu?为什么我不能选择侧面菜单中的第一项? 【发布时间】:2016-05-28 03:29:23 【问题描述】:我有一个非常简单的项目,只有一个表单和五个命令。我将每个命令都放在侧边菜单和溢出菜单上。它们在溢出菜单上都可以正常工作,但在侧面菜单上,第一个永远不会工作。其他四个工作正常,但第一个命令失败。通常,当我触摸它时,什么也没有发生。有时它会被选中,并保持选中状态,直到我单击另一个。但是该命令永远不会被执行。难道我做错了什么?或者这是一个错误?
它在模拟器上运行良好。它在我的带有 4G LTE、运行 android 5.1 的 Android Moto E(第 2 代)上失败。我没有在任何其他手机或平板电脑上运行过它。
import com.codename1.ui.*;
import com.codename1.ui.events.ActionEvent;
import com.codename1.ui.layouts.BoxLayout;
import com.codename1.ui.plaf.UIManager;
@SuppressWarnings("HardCodedStringLiteral")
public class Playground
private Form current;
private MainForm mainForm;
public void init(Object context)
UIManager.initFirstTheme("/theme");
public void start()
if (current != null)
current.show();
return;
Toolbar.setGlobalToolbar(true);
mainForm = new MainForm();
Form hi = mainForm;
hi.show();
current = hi;
public void stop()
public void destroy()
private class MainForm extends Form
MainForm()
super("Test of Hamburger Menu");
Display.getInstance().setCommandBehavior(Display.COMMAND_BEHAVIOR_BUTTON_BAR_TITLE_RIGHT);
setLayout(new BoxLayout(BoxLayout.Y_AXIS));
Toolbar toolbar = new Toolbar();
setToolbar(toolbar);
Command dummyOne = new PlaygroundCommand("One");
Command dummyTwo = new PlaygroundCommand("Two");
Command dummyThree = new PlaygroundCommand("Three");
Command dummyFour = new PlaygroundCommand("Four");
Command dummyFive = new PlaygroundCommand("Five");
toolbar.addCommandToSideMenu(dummyOne);
toolbar.addCommandToSideMenu(dummyTwo);
toolbar.addCommandToSideMenu(dummyThree);
toolbar.addCommandToSideMenu(dummyFour);
toolbar.addCommandToSideMenu(dummyFive);
toolbar.addCommandToOverflowMenu(dummyOne);
toolbar.addCommandToOverflowMenu(dummyTwo);
toolbar.addCommandToOverflowMenu(dummyThree);
toolbar.addCommandToOverflowMenu(dummyFour);
toolbar.addCommandToOverflowMenu(dummyFive);
private void doCommand(ActionEvent evt)
Dialog.show("Command", evt.getCommand().toString(), Dialog.TYPE_INFO, null, "OK", null);
private class PlaygroundCommand extends Command
PlaygroundCommand(String name)
super(name);
@Override
public void actionPerformed(final ActionEvent evt)
doCommand(evt);
【问题讨论】:
【参考方案1】:不要这样做:
Display.getInstance().setCommandBehavior(Display.COMMAND_BEHAVIOR_BUTTON_BAR_TITLE_RIGHT);
我们通常在start
中初始化表单,而不是在init
方法中,因为它更多的是应用程序流程而不是实际初始化。因此,这两件事中的一件可能导致了这种奇怪的行为。
【讨论】:
感谢您的建议。很高兴知道,尽管它没有解决问题。现在,当我触摸第一个菜单项时,它通常会被高亮显示,但它仍然没有执行。我修改了上面的代码以显示我刚刚测试的代码。 我也尝试过完全删除 setCommandBehavior() 调用,但还是没有解决。 我认为这与状态栏区域的特殊处理有关。如果第一个命令非常高,它可能会与旨在下拉状态栏区域的事件发生冲突(本机在 Android 中)。 这是有道理的。在我的实验中,我发现如果我瞄准第一个项目的最底部,我有时可以激活它。 (我使用的主题是扩大了菜单项的大小。) 我们能够重现此问题,但我不确定这是否是我们可以/应该解决的问题。设备的顶部区域在大多数操作系统(ios 和 Android)中都是保留的,所以你不应该在那里放置任何东西。正确的解决方法是在默认情况下为SideCommand
UIID 提供更好的大小/填充。以上是关于为啥我不能选择侧面菜单中的第一项?的主要内容,如果未能解决你的问题,请参考以下文章
AutocompleteTextView 建议总是选择建议中的第一项
使用 Cursor Loader 选择 ListView 中的第一项