1

我想为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;
    }           
});

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

所以任何帮助将不胜感激。

4

2 回答 2

0

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

OnTouchListener oclButtons = new OnTouchListener(...);

然后您可以将相同的侦听器添加到 ArrayList 中的所有 Button。

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

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

于 2012-12-11T04:31:52.710 回答
0

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

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

于 2012-12-11T04:50:00.897 回答