3

我已经将 Blackberry 4.6.0 应用程序移植到了 4.7.0 上的 Storm。除了我试图控制的触摸事件之外,一切都运行良好。我在下面的方法中捕获触摸事件,但问题是在我在 touchEvent 中的逻辑执行并返回菜单(通过菜单按钮激活)后始终显示。我试过返回 false、true 和 super.touchEvent(message) 但它仍然出现。

关于如何防止菜单在捕获触摸事件后出现的任何想法?

protected boolean touchEvent(TouchEvent message)
{
     if (message.getEvent() == TouchEvent.CLICK)
     {
        //My code here
     }
}

非常感谢您的想法

4

2 回答 2

6

只是为了澄清haagmm的答案:

在将 TouchEvent.CLICK 发送到您的应用程序后,还将发送一个 navigationClick 事件。这是出于兼容性原因,因此即使应用程序没有明确编写以响应 touchEvents,像 ButtonFields 之类的东西也可以在触摸屏设备上运行。

如果您的应用程序中的字段未使用 navigationClick 事件(返回 true),则将显示上下文菜单。

如果您在单击按钮字段时看到此行为,说明默认情况下,ButtonFields 不消耗单击事件。我发现始终使用以下样式位设置构造 ButtonFields 是一种好习惯:

ButtonField myButtonField = 
    new ButtonField( ButtonField.CONSUME_CLICK | ButtonField.NEVER_DIRTY );

haagmm 的代码是一种解决方案,但更好的办法是复制您的 TouchEvent.CLICK 处理代码并将其粘贴到 navigationClick 方法中。这样,像 BlackBerry Tour 这样的轨迹球设备仍然可以使用您的应用程序。

于 2009-06-07T19:17:53.743 回答
3

如果您“单击”屏幕或在 sim 中单击鼠标左键,您将触发上下文菜单,类似于单击 4.6 设备上的轨迹球。

您将需要在重载 touchEvent 的字段上执行类似的操作:

 protected boolean navigationClick(int status, int time) { return true; }
于 2009-05-12T20:47:08.310 回答