Java 当按下/实现按钮时进行操作的替代方法,android
我想为android 4.0制作一个有9个按钮的应用程序,我需要每个按钮在按下时调用一个方法,在释放时调用另一个方法 我有点惊讶,没有一种真正直接的方法来完成我刚才描述的内容,但由于我在stackoverflow上阅读了一些问题和答案,我通过在每个按钮中添加一个监听器,成功地完成了我需要的任务,如下面代码中的一个按钮所示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
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;
}