Почему навигация по FOCUSABLE LabeField обходит стороной в Blackberry?
У меня есть LabelField со стилем FOCUSABLE и много фокусируемых полей после него, и я переопределил метод navigationMovement объекта LabelField.
Проблема в том, что код никогда не входит в новую реализацию navigationMovement, но фокус обычно перемещается из LabelField в следующее поле без передачи реализацией navigationMovement!
PS, я также протестировал использование отладчика, чтобы убедиться, что он никогда не попадет в его реализацию.
Почему это происходит и как перехватить событие navigationMovement для FOCUSABLE LabelField?
КОД:
Вот класс:
public abstract class FocusableLabelField extends LabelField {
public boolean isDownUnfocused = false;
public FocusableLabelField(String text) {
super(text, FOCUSABLE);
}
protected void drawFocus(Graphics graphics, boolean on) {
// DO NOTHING, FOCUS IS HANDLED IN PAINT
}
protected void paint(Graphics graphics) {
if(isDownUnfocused == true)
graphics.setColor(0xFFFFFF);
else {
if(isFocus())
graphics.setColor(0xFFFFFF);
else {
graphics.setColor(0x777777);
}
}
super.paint(graphics);
}
protected void onFocus(int direction) {
isDownUnfocused = false;
onFocusing();
super.onFocus(direction);
}
public abstract void onFocusing();
public void redraw() {
invalidate();
}
protected boolean navigationMovement(int dx, int dy, int status, int time) {
//TODO CHECK WHY IT'S NOT ENTERING HERE !
if(dy>0)
isDownUnfocused = true;
invalidate(); // IF REMOVED NO EFFECT WILL BE APPLIED
return super.navigationMovement(dx, dy, status, time);
}
}
И вот как я использую это на экране:
FocusableLabelField field = new FocusableLabelField("title") {
public void onFocusing() {
// some logic in the screen is done here ...
}
} ;
1 ответ
Я только что запустил ваш точный код в приложении на симуляторе 5.0 8900 и симуляторе 7.1 9900, и я увидел ваш navigationMovement()
называется. Однако я не уверен на 100%, что его вызывают, когда вы этого хотите.
Я не знаю точно, что вы пытаетесь сделать, но, глядя на код выше, похоже, что вы просто пытаетесь добавить пользовательский рисунок для цветов фокуса. Это правильно?
Если это так, я не знаю точно, почему вам нужно переопределить navigationMovement()
, Почему бы не использовать такой код:
public abstract class FocusableLabelField extends LabelField {
public FocusableLabelField(String text) {
super(text, FOCUSABLE);
}
protected void drawFocus(Graphics graphics, boolean on) {
// DO NOTHING, FOCUS IS HANDLED IN PAINT
}
protected void paint(Graphics graphics) {
int oldColor = graphics.getColor();
if(isFocus())
graphics.setColor(0xFFFFFF);
else {
graphics.setColor(0x777777);
}
super.paint(graphics);
graphics.setColor(oldColor);
}
protected void onFocus(int direction) {
onFocusing();
invalidate();
super.onFocus(direction);
}
protected void onUnfocus() {
invalidate();
super.onUnfocus();
}
public abstract void onFocusing();
}