【发布时间】:2012-08-13 22:33:21
【问题描述】:
我遇到了一个问题,如果我在字段外按下/触摸,则会为具有焦点的字段触发 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 中的空白区域并且 fm1 内的 Field 具有焦点,则会触发其 fieldchanged 事件。
目前,我的补救措施是捕获touchEvent 并将其传递给适当的FieldManager。我的CustomFM 的touchEvent 然后将处理获取该字段并调用 fieldChanged,如果一个字段实际上已被按下
所以在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;
}
我的 CustomFM2 的 touchEvent 是。
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;
}
我想知道是否有更简单的解决方案?我错过了什么吗?
【问题讨论】:
-
无法使用 5.0 9550 模拟器重现它:2 个水平字段管理器,每个字段中都有点击消费按钮字段。工作正常。单击经理的空白区域不会触发 FieldChangeListener 事件。您使用的是哪个版本/设备?
-
@Max 火炬 OS6。我想我现在明白了。这篇文章的答案帮助了[stackoverflow.com/questions/5948222/…。一会儿我会发布答案。我在上面做的事情有点离题。
-
我遇到了同样的问题。请在此处查看答案BlackBerry click outside Field。
标签: blackberry