我想为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;
}
});
我想知道是否有替代方法可以完成此行为而无需为每个按钮添加一个侦听器。我认为这是浪费资源和大量编码。我无法想象我最终是否需要添加更多按钮。
所以任何帮助都会受到赞赏。
答案 0 :(得分:0)
您可以将所有按钮添加到数组或ArrayList,然后在类中定义侦听器字段。
OnTouchListener oclButtons = new OnTouchListener(...);
然后,您可以将相同的侦听器添加到ArrayList中的所有按钮。
for (Button b : listOfButtons) {
b.setOnTouchListener(oclButtons);
}
为每个Button设置ID的另一种方法是获取/设置标签(因为每个视图都需要一个唯一的ID)。您的监听器可以使用v.getTag()来确定触摸了哪个按钮。
答案 1 :(得分: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;
}
我希望你会喜欢我的逻辑:)