【问题标题】:Alternative to make an action when pressing/realising a button, android按下/实现按钮时执行操作的替代方法,android
【发布时间】:2012-12-11 00:41:26
【问题描述】:

我想为android 4.0制作一个有9个按钮的应用程序,我需要每个按钮在按下时调用一个方法,在释放时调用另一个方法。 p>

我有点惊讶,没有一个真正直接的方法来完成我刚才描述的事情,但感谢我在 stackoverflow 上阅读的一些问题和答案,我设法通过在每个中添加一个侦听器 来完成我需要的按钮的数量,如下代码中的一个按钮所示。

buttonUp.setOnTouchListener(new OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {
        if(event.getAction() == MotionEvent.ACTION_DOWN) {
            buttonUpPressed();
        } else if (event.getAction() == MotionEvent.ACTION_UP) {
            buttonUpReleased();
        }                
        return true;
    }           
});

我想知道是否有替代方法来完成此行为,而无需为 每个 按钮添加侦听器。我认为这是对资源和大量编码的浪费。我无法想象最终是否必须添加更多按钮。

因此,我们将不胜感激。

【问题讨论】:

    标签: java android android-button ontouchlistener


    【解决方案1】:

    用 OnTouchListener 实现你的类

    Button a,b;
            Button[] bArray = {a,b};
            for (int i = 0; i < bArray.length; i++) {
                bArray[i].setOnTouchListener(this)
            }
    

    然后添加未实现的方法

    @Override
        public boolean onTouch(View v, MotionEvent event) {
            // TODO Auto-generated method stub
                if(event.getAction() == MotionEvent.ACTION_DOWN){
                    switch (v.getId()) {
                    case R.id.button1:
    
                        break;
    
                    default:
                        break;
                    }
                }
                else if(event.getAction() == MotionEvent.ACTION_UP){
                    switch (v.getId()) {
                    case R.id.button1:
    
                        break;
    
                    default:
                        break;
                    }
                }
            return false;
        }
    

    我希望你会喜欢我的逻辑:)

    【讨论】:

      【解决方案2】:

      您可以将所有按钮添加到一个数组或 ArrayList 中,然后在您的类中定义一个侦听器字段。

      OnTouchListener oclButtons = new OnTouchListener(...);
      

      然后你可以为ArrayList中的所有Button添加相同的监听器。

      for (Button b : listOfButtons) {
          b.setOnTouchListener(oclButtons);
      }
      

      为每个按钮设置 ID 的另一种方法是获取/设置标签(因为每个视图都需要一个唯一的 ID)。您的侦听器可以使用 v.getTag() 确定哪个按钮被触摸。

      【讨论】:

      • 感谢您的回复,逻辑有效,但在这种特殊情况下,添加 OnClickListeners 对我没有用,因为我需要在按下按钮时执行一个操作,在释放按钮时执行另一个操作。只有在释放按钮后才会认为点击是这样的:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-27
      • 1970-01-01
      相关资源
      最近更新 更多