需求描述:
我们在自定义View的时候,如果想在View被点击时,动态的设置一些内部的属性(比如:选中状态),而又不想影响外部设置的点击事件,这就需要给View绑定两个或多个OnClickListener接口。
实现思路:
1)首先,我们需要在View内部定义一个List<OnClickListener> onClickListeners容器,来存放用户设置的OnClickListener接口;
2)重写View控件的setOnClickListener方法,把用户设置的OnClickListener接口添加到容器;
3)调用super.setOnClickListener方法,设置一个匿名内部OnClickListener实现类,并在onClick事件中依次遍历调用OnClickListener容器中接口的onClick方法;
具体代码:
List<OnClickListener> onClickListeners;
/**
* 设置外部点击事件接口
* @param listener
*/
@Override
public void setOnClickListener(OnClickListener listener) {
if (onClickListeners==null){
onClickListeners = new ArrayList<OnClickListener>();
}
onClickListeners.add(listener);
super.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//响应外部点击事件
for (OnClickListener l:onClickListeners){
l.onClick(v);
}
}
});
}