我正在编写一个J(2)ME应用程序(实际上是一个MIDlet),屏幕上显示的命令按钮比命令按钮更多,我遇到了这种情况:
到具体用户界面构造的映射也可能依赖于 命令总数。例如,如果应用程序要求 用于比可映射到可用的更抽象的命令 设备上的物理按钮,然后设备可以使用备用 人机界面,如菜单。例如,抽象命令 无法映射到物理按钮的是放在菜单中 标签“Menu”映射到其中一个可编程按钮上。
因此,在这种情况下,会自动生成一个菜单,并添加“选择”和“返回”选项。 “后退”选项应该退出菜单并返回上一屏幕。这原则上是有效的,问题是我需要以某种方式捕捉它并触发重绘,否则屏幕会变成空白。
所以我的问题是:有没有办法捕捉这个'隐含'(自动添加'后退'命令?
代码示例和结果:
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轻松捕获并相应地处理(触发重绘)。但现在我有两个'后退'命令,隐含一个(消隐)和我的。 所以问题的替代版本是:我能否以某种方式阻止添加隐式“后退”命令?
答案 0 :(得分:1)
您无法阻止添加隐式“后退”命令,但您可以从调用Canvas.showNotify重绘屏幕:
该实现在此Canvas之前调用showNotify() 在显示屏上显示。 Canvas子类可以覆盖它 在显示之前执行任务的方法,例如设置 动画,启动计时器等。默认实现 Canvas类中的方法为空。