我有一个问题,如果我在字段外按下/触摸 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;
}
我想知道的是,是否有更简单的解决方案?我错过了什么吗?
最佳答案
只是有同样的问题。主要问题是navigationClick
和 trackwheelClick
如果在 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/