菜🐔专属文章,大佬请跳过
背景
当初啊,我给一个View设置点击事件,有一部分操作希望由用户完成。于是去问我大哥,大哥说把点击事件抛出去。🤔🤔
抛出去,怎么抛,怎么抛,一开始我也不会,现在展示一下😏
- 先是View里面要加的东西
private View.OnClickListener mClick;
....
mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 默认逻辑
if (mClick != null) {
// 这里就是外部实现的了
mClick.onClick(v);
}
}
});
....
/**
* 设置点击事件回调
*/
public void setOnClickListener(View.OnClickListener listener) {
mClick = listener;
}
- 外面用的时候,就和添加点击事件一样了
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
....
}
});
后来啊,我遇到了一个情况🐷,View里面希望有个判断条件,这个条件也是从外面传过来,这时候我大哥又说了,定义个拦截器就好了🐂
- View里面加的东西
private OnIntercept mOnIntercept;
....
// 定义拦截器的接口
public interface OnIntercept {
// 因为是给列表每一项添加拦截器,所以穿进去item,不需要就没有参数咯~
boolean isIntercept(ActionItem item);
}
....
mOnIntercept.isIntercept(item)
public void setOnIntercept(OnIntercept intercept) {
mOnIntercept = intercept;
}
- 外面用的时候
view.setOnIntercept(new OnIntercept() {
@Override
public boolean isIntercept(ActionItem item) {
return false/true;
}
});
拦截器想在哪加在哪加,用处很多,我直呼高端操作🎉🎉。
一起看下来的话其实和添加点击事件是一样的,新手对于回调这种东西总是很懵逼,用几次就get到意思了,把方法抛出去由外面实现,里面再拿来用。
网友评论