Java 当按下/实现按钮时进行操作的替代方法,android

Java 当按下/实现按钮时进行操作的替代方法,android,java,android,android-button,ontouchlistener,Java,Android,Android Button,Ontouchlistener,我想为android 4.0制作一个有9个按钮的应用程序,我需要每个按钮在按下时调用一个方法,在释放时调用另一个方法 我有点惊讶,没有一种真正直接的方法来完成我刚才描述的内容,但由于我在stackoverflow上阅读了一些问题和答案,我通过在每个按钮中添加一个监听器,成功地完成了我需要的任务,如下面代码中的一个按钮所示 buttonUp.setOnTouchListener(new OnTouchListener() { public boolean onTouch(View v, M

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

我有点惊讶,没有一种真正直接的方法来完成我刚才描述的内容,但由于我在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;
    }           
});
我想知道是否有其他方法可以实现此行为,而不必为每个
按钮添加侦听器。我认为这是对资源的浪费和大量的编码。我无法想象如果我最终不得不添加更多的按钮


因此,任何帮助都将不胜感激。

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

OnTouchListener oclButtons = new OnTouchListener(...);
然后,您可以向ArrayList中的所有按钮添加相同的侦听器

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

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

使用OnTouchListener实现您的类

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

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

谢谢您的回复,逻辑是有效的,但在这种特殊情况下,添加OnClickListeners对我没有用处,因为我需要在按下按钮时执行一个操作,在释放按钮时执行另一个操作。只有在释放按钮后,单击才会被认为是这样的:)
@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;
    }