5

He creado una ButtonField & un BitmapField como ..Cómo manejar los eventos ButtonField y BitmapField Click (Touch) en Blackberry Storm?

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..."); 
    } 
    } 
} 

Pero el ButtonField o BitmapField clic no está sucediendo en Blackberry 4.7 simulador.

Quiero construirlo para Blackberry Storm, así que estoy usando Blackberry 4.7

Cómo manejar click/toque eventos para ButtonField & BitmapField para Blackberry Storm?


i M crear las ButtonField & BitmapFields como

okButtonField = new ButtonField("Ok", BitmapField.HIGHLIGHT_SELECT | BitmapField.FOCUSABLE); 

startBitmapField = new BitmapField(startBitmap, BitmapField.HIGHLIGHT_SELECT | BitmapField.FOCUSABLE); 

Su trabajo con ..

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; 
} 

pero cada vez que se invoca el mismo botón que está teniendo el foco.

Significa que si el botón "Aceptar" tiene foco, a pesar de que ha hecho clic en el botón "Eliminar" se llama al botón "Aceptar".

Entonces, ¿cómo cambiar el foco en el botón Hacer clic? significa que ButtonField o BitmapField se hace clic, debe obtener el foco?

¿hay algún método para comprobar "button.isClicked() como button.isFocus()"?

Respuesta

5

En primer lugar, no olvide agregar hfm a la pantalla;)
En realidad, el clic del botón funciona bien.
Ahora, para hacer que el clic de mapa de bits también funcione, implemente el boolean touchEvent (TouchEvent message) protegido para su BitmapField. Será mejor crear una clase extendida:

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); 
    } 
} 
+0

sí. Agregué hfm a la pantalla. En realidad hay r 2 botones. Entonces, ¿cómo manejar sus eventos de clic? Ahora estoy entregando por button.setChangeListener (esto) y anulando su método fieldChanged() como mi código anterior. Pero no tiene efecto. Entonces, ¿cómo manejar eventos táctiles para 2 botones? Voy a probar tu código para bitmapFields. – Shreyas

+0

Shreyas, he actualizado el código con un botón más, todavía está funcionando ... ¿Tal vez depende de otra cosa? Compruébelo, y si todavía no funciona, puede publicar su código completo para que lo descubramos. –

+0

¿puedes tocar ButtonFields & BitmapFields en el simulador 4.7.0.41? – Shreyas

Cuestiones relacionadas