我创建了一个自定义视图,可以改变他在Click上的外观。
onClickListener
和OnTouchEventListener
被正确调用了
视图中的appreance已更改。
但是,只要我在活动中设置另一个onClickListener
即可与之互动
其他方法,只调用Activity中的onClickListener
并调用
View中的一个被忽略了。
是否有可能从视图继承onClickListener
到
活动,以便两者(Visualchange和一个方法的调用)OnClick的调用?
我还尝试使用Drawables和StateListDrawable
实现View,但也没有任何运气,因为“state_pressed”不会被调用。
有什么想法吗? 提前谢谢!
答案 0 :(得分:2)
如果要在自定义视图中设置侦听器,必须在自定义视图的构造函数中设置侦听器。否则它不会在外面调用。 (您不应该使用能够处理点击的功能)
答案 1 :(得分:0)
从Activity中设置对象的OnClickListener时,它将覆盖该对象的OnClickListener。如果你在onClick()方法中做了类似的事情,它应该起作用。
public void onClick(View v){
//Do whatever you want
super.onClick(v);
}
但是,您可能不应该通过单击或触摸侦听器设置按钮图形。这正是按钮选择器的用途。
答案 2 :(得分:0)
如果要从视图外部设置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;
}
就是这样。