Как обрабатывать события ClickField & BitmapField Click (Touch) в Blackberry Storm?
Я создал ButtonField & BitmapField, как..
public class MyCanvas extends MainScreen implements FieldChangeListener
{
HorizontalFieldManager hfm;
private Bitmap startBitmap;
private BitmapField startBitmapField;
private ButtonField okButton;
MyCanvas()
{
hfm = new HorizontalFIeldManager();
startBitmap = Bitmap.getBitmapResource("start.png");
startBitmapField = new BitmapField(startBitmap);
startBitmapField.setChangeListener(this);
hfm.add(startBitmapField);
okButton = new ButtonField("Ok", ButtonField.CONSUME_CLICK | ButtonField.NEVER_DIRTY);
okButton.setChangeListener(this);
hfm.add(okButton);
}
public void fieldChanged(Field field, int context)
{
if(field == startBitmapField)
{
System.out.println("Touched START...");
}
else if(field == okButton)
{
System.out.println("Touched Ok...");
}
}
}
Но нажатия кнопки ButtonField или BitmapField не происходит в симуляторе Blackberry 4.7.
Я хочу построить его для Blackberry Storm, поэтому я использую Blackberry 4.7
Как обрабатывать события касания / нажатия для ButtonField и BitmapField для Blackberry Storm?
Я создаю ButtonField & BitmapFields как
okButtonField = new ButtonField("Ok", BitmapField.HIGHLIGHT_SELECT | BitmapField.FOCUSABLE);
startBitmapField = new BitmapField(startBitmap, BitmapField.HIGHLIGHT_SELECT | BitmapField.FOCUSABLE);
Его работа с..
protected boolean touchEvent(TouchEvent event)
{
switch( event.getEvent() )
{
case TouchEvent.DOWN: ........
return true;
case TouchEvent.MOVE: .......
return true;
case TouchEvent.UP: ........
return true;
case TouchEvent.CLICK:
if(deleteButton.isFocus())
{
System.out.println("Touched DEL ..........");
}
else if(okButton.isFocus())
{
System.out.println("Touched OK ..........");
}
else if(startBitmapField.isFocus())
{
System.out.println("Touched START ..........");
}
return true;
}
return false;
}
но каждый раз вызывается одна и та же кнопка, которая имеет фокус.
Означает, что кнопка "ОК" имеет фокус, тогда даже если вы нажали кнопку "Удалить", кнопка "ОК" вызывается.
Итак, как изменить фокус на нажатие кнопки? означает, какой бы ни ButtonField или BitmapField нажали, должен получить фокус?
Есть ли способ проверить "button.isClicked() как button.isFocus() "?
1 ответ
Прежде всего, не забудьте добавить hfm на экран;)
На самом деле нажатие кнопки работает нормально.
Теперь, чтобы щелчок по растровому изображению также работал, внедрите защищенное логическое touchEvent(сообщение TouchEvent) для вашего BitmapField. Будет лучше создать расширенный класс:
class MyCanvas extends MainScreen implements FieldChangeListener {
HorizontalFieldManager hfm;
private Bitmap startBitmap;
private BitmapField startBitmapField;
private ButtonField okButton;
private ButtonField cancelButton;
MyCanvas() {
hfm = new HorizontalFieldManager();
add(hfm);
startBitmap = Bitmap.getBitmapResource("start.png");
startBitmapField = new TouchBitmapField(startBitmap);
startBitmapField.setChangeListener(this);
hfm.add(startBitmapField);
okButton = new ButtonField("Ok", ButtonField.CONSUME_CLICK
| ButtonField.NEVER_DIRTY);
okButton.setChangeListener(this);
hfm.add(okButton);
cancelButton = new ButtonField("Cancel", ButtonField.CONSUME_CLICK
| ButtonField.NEVER_DIRTY);
cancelButton.setChangeListener(this);
hfm.add(cancelButton);
}
public void fieldChanged(Field field, int context) {
if (field == startBitmapField) {
System.out.println("Touched START...");
} else if (field == okButton) {
System.out.println("Touched Ok...");
} else if (field == cancelButton) {
System.out.println("Touched Cancel...");
}
}
}
class TouchBitmapField extends BitmapField {
public TouchBitmapField(Bitmap startBitmap) {
super(startBitmap);
}
protected boolean touchEvent(TouchEvent message) {
if (TouchEvent.CLICK == message.getEvent()) {
FieldChangeListener listener = getChangeListener();
if (null != listener)
listener.fieldChanged(this, 1);
}
return super.touchEvent(message);
}
}