为啥我不能选择侧面菜单中的第一项?

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 中的第一项

Extjs 4.1 如何选择组合中的第一项

无论我选择啥,我的 Web 表单都只插入下拉列表中的第一项

如果表单未绑定,如何选择 MS Access 组合框中的第一项

级联选择/下拉菜单