我创建了一个自定义视图,可以改变他在Click上的外观。 onClickListener
和OnTouchEventListener
被正确调用,并且视图中的appreance发生了变化。
但是只要我在Activity中设置另一个onClickListener
与其他方法进行交互,就只会调用Activity中的onClickListener
并忽略View中的那个。
是否有可能从视图到活动继承onClickListener
,以便两者(Visualchange和方法调用)OnClick被调用?
我也尝试使用Drawables和StateListDrawable
实现View,但也没有任何运气,因为“state_pressed”不会被调用。
有任何想法吗?提前致谢!
如果要在自定义视图中设置侦听器,则必须在自定义视图的构造函数中设置侦听器。否则它不会在外面调用。 (您不应该使用能够处理点击的功能)
从Activity调用时,您将覆盖对象的OnClickListener。如果你在你的onClick()方法中做了类似的事情,它应该工作。
public void onClick(View v){
//Do whatever you want
super.onClick(v);
}
但是,您可能不应该通过单击或触摸侦听器设置按钮图形。这正是按钮选择器的用途。
如果要从视图外部设置OnClickListener,例如执行:customView.setOnClickListener(listener)
,则可以执行以下操作:
onClickListener
类型的变量:private OnClickListener onClickListener;
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if(event.getAction() == KeyEvent.ACTION_UP &&
(event.getKeyCode() == KeyEvent.KEYCODE_DPAD_CENTER || event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) {
if(onClickListener != null) onClickListener.onClick(this);
}
return super.dispatchKeyEvent(event);
}
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
setPressed(true);
}
else if(event.getAction() == MotionEvent.ACTION_UP) {
if(onClickListener != null) onClickListener.onClick(this);
setPressed(false);
}
else {
setPressed(false);
}
return super.dispatchTouchEvent(event);
}
setOnClickListener
:@Override
public void setOnClickListener(OnClickListener l) {
onClickListener = l;
}
而已。