我有一个带有多个按钮的片段。对于每个按钮,我创建了一个setOnTouchListener
,例如下面的代码。
Button btnOne = (Button) view.findViewById(R.id.button_one);
Button btnTwo = (Button) view.findViewById(R.id.button_two);
btnOne.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
myMethod(btnOne);
return false;
}
});
btnTwo.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
myMethod(btnTwo);
return false;
}
});
如何在所有按钮中创建一个通用方法setOnTouchListener
?我想要这样的事情:
btnOne.method();
btnTwo.method();
btnThree.method();
...
答案 0 :(得分:1)
您可以使用相同的OnTouchListener并使用view.getId()区分不同的视图:
View.OnTouchListener listener = new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (v.getId() == R.id.button_one) {
// do your thing
}
else if (v.getId() == R.id.button_two) {
// do your thing
}
return false;
}
};
由于您似乎为两个按钮调用相同的myMethod(Button)方法,因此可以缩短它:
View.OnTouchListener listener = new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
myMethod(v);
return false;
}
};
myMethod可以安全地将View v转换为Button对象((Button)v)以使用Button特定对象。
请注意,您应该在onTouch中返回true而不是false以消耗触摸事件。
答案 1 :(得分:1)
创建一个返回View.OnTouchListener
的方法,并将该对象传递给setOnTouchListener
的参数。
btnTwo.setOnTouchListener(getTouchListener());
public View.OnTouchListener getTouchListener() {
return new View.OnTouchListener() { ... }
}
答案 2 :(得分:1)
您正在使用内部匿名类对象来实现接口presentationNode
。
如果我是你,最好在View.OnTouchListener
(或其他独立的外部类)中实现界面:
Fragment
使用参数public class MyFragment extends Fragment implements View.OnTouchListener {
(...)
@Override
public boolean onTouch(View v, MotionEvent event) {
return myMethod(v);
}
(...)
}
定义myMethod
。您可以使用每个View v
对象View
来区分按钮(已经在Emanuel Moecklin的回答中提到过)。
id
最后,您可以非常巧妙地为多个按钮设置相同的public class MyFragment extends Fragment implements View.OnTouchListener {
(...)
private boolean myMethod(View v) {
switch (v.getId()) {
case R.id.button_one:
(...)
return true;
case R.id.button_two:
(...)
return true;
case R.id.button_three:
(...)
return true;
(...)
default:
return false;
}
}
(...)
}
对象。
OnTouchListener