gpt4 book ai didi

BlackBerry touchEvent 外场触发 fieldChanged

转载 作者:行者123 更新时间:2023-12-04 02:19:27 39 4
gpt4 key购买 nike

我有一个问题,如果我在字段外按下/触摸 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/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com