У меня проблема с тем, что если я нажимаю / касаюсь за пределами поля, событие 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
имел фокус, его событие с изменением поля было бы вызвано.
В данный момент мое лекарство - поймать touchEvent
и передать его соответствующему FieldManager
. touchEvent
для моего CustomFM
будет обрабатывать получение поля и вызов 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;
}
И мой touchEvent
для моего CustomFM2 есть.
OFFSET
является верхней y-позицией fm2 относительно экрана.
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;
}
Что мне интересно, так это то, что если есть более простое решение для этого? Я что-то упустил?