BlackBerry touchEvent 外场触发 fieldChanged

标签 blackberry

我有一个问题,如果我在字段外按下/触摸 fieldChanged()为具有焦点的字段触发事件。

我的 MainScreen 的布局很简单,就像这样:

public class myMainScreen extends MainScreen implements FieldChangeListener{

    public myMainScreen(){
        CustomFM1 fm1 = new CustomFM1();
        CustomFM2 fm2 = new CustomFM2();

        add(fm1);
        add(fm2);
    }

}

如果我按下 FieldManager 内的按钮/字段它工作正常。问题是当我按下空白空间时。因此,如果我要按 fm2 中的空白区域和 Field里面 fm1有了焦点,它的 fieldchanged 事件就会被触发。

目前,我的补救措施是捕获 touchEvent并将其传递给适当的FieldManager . touchEvent对于我的CustomFM然后将处理获取该字段并调用 fieldChanged,如果一个字段实际上已被按下

所以在 myMainScreen触摸事件看起来像:
protected boolean touchEvent(TouchEvent message){

    int index = this.getFieldAtLocation(message.getX(1), message.getY(1));

    switch(index){

        case 0:
           fm1.touchEvent(message);
           break;       

        case 1:
           fm2.touchEvent(message);
           break;

    }

    return true;
}

还有我的touchEvent因为我的 CustomFM2 是。OFFSET是 fm2 相对于屏幕的顶部 y 位置。
protected boolean touchEvent(TouchEvent message){

    switch(message.getEvent()){

    ... 

        case TouchEvent.UP:
            int index = this.getFieldAtLocation(message.getGlobalX(1), message.getGlobalY(1) - OFFSET);
            if(index != -1){
                Field field = getField(index);
                field.getChangeListener().fieldChanged(field, 0);

            }

            break;

    }

    return true;

}

我想知道的是,是否有更简单的解决方案?我错过了什么吗?

最佳答案

只是有同样的问题。主要问题是navigationClicktrackwheelClick如果在 touchEvent 中未使用触摸事件,则调用.

解决办法是调用fieldChangeNotify*Click 内方法仅限 如果点击是由 触发的非触摸 事件。触摸事件的状态为 0,因此您可以按如下方式进行检查:

protected boolean navigationClick( int status, int time ){

    if (status != 0) fieldChangeNotify(0);
    return true;  
}

protected boolean trackwheelClick( int status, int time ){        

    if (status != 0) fieldChangeNotify(0);
    return true;
}

这种方法意味着您不需要跟踪触摸事件是否在字段范围内。

关于BlackBerry touchEvent 外场触发 fieldChanged,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6398282/

相关文章:

java - Blackberry:OS 5.0 上的 BrowserField2 API 滚动问题

blackberry - 如何在 Blackberry 中为 LabelField 文本设置字体?

javascript - 如何从 json 文件中选择并打印值

java - 开发网站的移动版本

blackberry - 无法在黑莓模拟器中显示图像

java - 从监听器内将变量传递到构造函数

blackberry - 黑莓应用程序开发入门

java - blackberry 的 j2me 配置和配置文件

java - 如何检测 BlackBerry 设备的屏幕方向是 "natural"?

Javascript Date.parse 在黑莓浏览器中返回 NaN