如何捕获隐式菜单'Back'命令?

时间:2016-06-07 12:01:14

标签: java-me midlet

我正在编写一个J(2)ME应用程序(实际上是一个MIDlet),屏幕上显示的命令按钮比命令按钮更多,我遇到了这种情况:

  

到具体用户界面构造的映射也可能依赖于   命令总数。例如,如果应用程序要求   用于比可映射到可用的更抽象的命令   设备上的物理按钮,然后设备可以使用备用   人机界面,如菜单。例如,抽象命令   无法映射到物理按钮的是放在菜单中   标签“Menu”映射到其中一个可编程按钮上。

http://docs.oracle.com/javame/config/cldc/ref-impl/midp2.0/jsr118/javax/microedition/lcdui/Command.html

因此,在这种情况下,会自动生成一个菜单,并添加“选择”和“返回”选项。 “后退”选项应该退出菜单并返回上一屏幕。这原则上是有效的,问题是我需要以某种方式捕捉它并触发重绘,否则屏幕会变成空白。

所以我的问题是:有没有办法捕捉这个'隐含'(自动添加'后退'命令?

代码示例和结果:

enter image description here

 public class HelloWorld extends MIDlet
  {
    private Form helloFrm; 
    private Display display;

    public HelloWorld() {
      Command command1 = new Command("Cmd 1", Command.SCREEN, 1);
      Command command2 = new Command("Cmd 2", Command.SCREEN, 0);
      Command command3 = new Command("Cmd 3", Command.SCREEN, 0);
      Command command4 = new Command("Cmd 4", Command.SCREEN, 0);

      helloFrm = new Form("Hello World");

      helloFrm.addCommand(command1);
      helloFrm.addCommand(command2);
      helloFrm.addCommand(command3);
      helloFrm.addCommand(command4);
    }

    public void startApp()
    {
        display = Display.getDisplay(this);
        display.setCurrent(helloFrm);

    }

    public void pauseApp()
    {
    }

    public void destroyApp(boolean unconditional)
    {
    }
}

编辑以添加更多详细信息:

根据我的评论,我将在我的应用程序中从Form返回Canvas,这就是屏幕消隐发生的地方。 我已经添加了自己的'Back'命令,这个命令正常工作,因为我可以使用CommandListener轻松捕获并相应地处理(触发重绘)。但现在我有两个'后退'命令,隐含一个(消隐)和我的。 所以问题的替代版本是:我能否以某种方式阻止添加隐式“后退”命令?

1 个答案:

答案 0 :(得分:1)

您无法阻止添加隐式“后退”命令,但您可以从调用Canvas.showNotify重绘屏幕:

  

该实现在此Canvas之前调用showNotify()   在显示屏上显示。 Canvas子类可以覆盖它   在显示之前执行任务的方法,例如设置   动画,启动计时器等。默认实现   Canvas类中的方法为空。