我遇到一个问题,如果我按下/触摸某个字段之外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
and a Field
inside fm1
有了焦点,就会触发它的 fieldchanged 事件。
目前,我的补救措施是抓住touchEvent
并将其传递给适当的FieldManager
. The touchEvent
for my CustomFM
然后将处理获取字段并调用 fieldChanged(如果确实按下了字段)
So in myMainScreen
touchEvent 看起来像:
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;
}
And my 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;
}
我想知道是否有更简单的解决方案?我错过了什么吗?