2010-03-30 39 views
0

根据documentation,如果当前可显示的是警报,则Display.setCurrent不起作用。这是一个问题,因为我想在用户选择一个命令时弹出另一个警报。有谁知道如何解决这个问题,以便我们可以从一个警报转到另一个警报?我正在使用CLDC 1.0和MIDP 2.0。Java ME中的多个连续警报

其他信息

该规范确实使我们能够同时在屏幕上编辑的警报,但一些诺基亚手机完全不应付自如。所以我现在试图从警报转到空白画布,然后回到警报。当然,我不希望用户与前一个画布进行交互,因此我似乎不得不创建一个新的空白画布。作为旁注,当显示警报时,这具有在仍然具有前一屏幕的手机上显得更糟的轻微缺点。

更大的问题是如何在画布加载后从空白画布切换回警报。在摩托罗拉模拟器上测试显示,从警报返回到前一个屏幕后,不会调用showNotify。我想我可以在paint方法中创建下一个警报,但这看起来像一个丑陋的黑客。

+0

这不是很清楚。你可能想在这里发布一些代码。您的提醒是否需要用户解雇或他们超时?为什么你使用画布作为背景而不是列表或表单?... – 2010-03-30 12:18:13

+0

@快速:我的提醒被用户解雇。我使用空白画布作为重定向用户的位置,然后弹出另一个警报。 – Casebash 2010-03-31 22:12:00

+0

您是否说您的应用程序没有要显示警报之外的信息?它的目的是什么? – 2010-04-01 17:37:51

回答

0

我找不到解决办法,所以我只用了油漆黑客。

public class AlertPage extends Canvas{ 
    MIDlet midlet; 
    Alert alert; 

    private AlertPage(MIDlet midlet){ 
     this.midlet=midlet; 
    } 

    protected void paint(Graphics arg0){ 
     //Yep, this is a hack, but showNotify doesn't seem to work well for Motorola 
     if(alert!=null){ 
      Display d=Display.getDisplay(midlet); 
      d.setCurrent(alert); 
      alert=null; 
     } 
    } 

    public static void showAlert(MIDlet m, Alert a){ 
     AlertPage page=new AlertPage(m); 
     Display d=Display.getDisplay(m); 
     page.alert=a; 
     d.setCurrent(page); 
    } 
} 
1

OK,所以你的问题是,你不能设置它做的事:

Display.setCurrent(alert1, alert2); 

Display.setCurrent(alert2); 

可能的,如果当前可显示已alert1

那么如何把一个空白的中间显示项目,并立即改变到下一个警报?假设当前可显示为alert1的,像这样在你的报警1的命令块:

Display.setCurrent(blankForm); 
Display.setCurrent(alert2); 

应工作假设你不使用默认的‘取消’命令。所以基本上它从alert1 - >(blankForm - >alert2)。

+0

我已经提出过这个建议,但是你更详细地介绍了它,所以+1 – Casebash 2010-04-05 00:51:39