【问题标题】:How to handle ButtonField & BitmapField Click (Touch) events in Blackberry Storm?如何处理 Blackberry Storm 中的 ButtonField 和 BitmapField 点击(触摸)事件?
【发布时间】:2009-08-29 10:37:17
【问题描述】:

我已经创建了一个 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...");
    }
   }
}

但在 Blackberry 4.7 模拟器中没有发生 ButtonField 或 BitmapField 点击。

我想为 Blackberry Storm 构建它,所以我使用的是 Blackberry 4.7

如何处理 Blackberry Storm 的 ButtonField 和 BitmapField 的点击/触摸事件?


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

但每次调用具有焦点的同一个按钮。

表示如果“确定”按钮具有焦点,那么即使您单击“删除”按钮也会调用“确定”按钮。

那么如何改变Button Click的焦点呢?意思是无论ButtonField还是BitmapField被点击,都应该获得焦点?

有什么方法可以检查“button.isClicked() like button.isFocus()”吗?

【问题讨论】:

    标签: user-interface blackberry blackberry-storm touchscreen rim-4.7


    【解决方案1】:

    首先,不要忘记将 hfm 添加到屏幕 ;)
    实际上按钮点击工作正常。
    现在,要使位图点击也能正常工作,请为您的 BitmapField 实现受保护的布尔 touchEvent(TouchEvent message)。创建扩展类会更好:

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

    【讨论】:

    • 是的。我在屏幕上添加了 hfm。实际上有 r 2 个按钮。那么如何处理它的点击事件。现在我正在处理 button.setChangeListener(this) 并覆盖它的 fieldChanged() 方法作为我上面的代码。但是没有效果。那么如何处理 2 个按钮的触摸事件呢?我会尝试你的 bitmapFields 代码。
    • Shreyas,我已经用另一个按钮更新了代码,它仍在工作......也许它取决于其他东西?检查它,如果它仍然不起作用,您可以发布您的完整代码,以便我们解决。
    • 你可以在模拟器 4.7.0.41 上触摸 ButtonFields 和 BitmapFields 吗?
    • 对此感到抱歉。我忘了提一下,我使用的是来自 Eclipse 插件组件 4.7.0.46 的 Storm 9530 默认模拟器,它工作正常。
    • 我在 Blackberry JDE 4.7.0.41 中工作并在 Blackberry 9500 和 9530 模拟器中进行了测试,但它无法正常工作。未调用 ButtonFields 和 BitmapFields 触摸事件。没有得到可能是什么问题。请建议。
    猜你喜欢
    • 2011-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    • 2023-03-27
    相关资源
    最近更新 更多