2016-06-07 55 views
1

我编程为J(2)ME应用程序(实际上一个MIDlet),其中比可用命令按钮多个命令被示出在屏幕上,我卡这种情况:如何捕捉隐式菜单'返回'命令?

映射到具体用户接口结构也可能取决于命令的总数。例如,如果应用程序询问 以获取比可以映射到设备上可用的物理按钮上的更多抽象命令,则该设备可以使用替代的人机界面,例如菜单。例如,不能映射到物理按钮上的抽象命令 被放置在菜单中,标签“菜单”被映射到其中一个可编程按钮上。

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) 
    { 
    } 
} 

编辑添加更多详细信息:

根据我的评论,我将从窗体返回到我的应用中的画布,这就是屏幕消隐发生的位置。 我已经添加了自己的'返回'命令,这个工作正常,因为我可以很容易地使用CommandListener捕捉并相应地处理(触发重绘)。但是现在我有两个“返回”命令,隐式(空白)和我的。 所以问题的另一个版本是:我能否以某种方式防止添加隐含的“后退”命令?

+0

当你说“我需要捕捉它并触发重绘,否则屏幕变空白”看起来你的真实应用程序是基于Canvas而不是Form。我对吗? –

+0

你是对的。在我的真实应用程序中,我将通过“返回”从窗体返回到画布,这是当屏幕变为空白时。 – nofish

+0

您是否检查sizeChanged或showNotify是否被调用? –

回答

1

您不能防止隐性“返回”命令添加,但你可以从重绘调用屏幕Canvas.showNotify

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