当RecyclerView中的Item中有EditText输入框,点击Item输入框获取焦点,点击事件冲突解决方案一:
自定义布局,并定义一个变量来控制是否拦截点击事件,
如:自定义LinearLayout
public class CustomLinearLayout extends LinearLayout {
public boolean mIsIntercept = false;//是否拦截子项点击事件 默认不拦截
public CustomLinearLayout(Context context) {
super(context);
}
public CustomLinearLayout(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public CustomLinearLayout(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return mIsIntercept;//true就是拦截 false 就是不拦截,拦截的意思是事件不会继续往下分发,如果当前View,处理这个点击事件,则事件到此终止,如果不处理这次事件,则事件会继续往上传递,不会往下分发了
}
public boolean ismIsIntercept() {
return mIsIntercept;
}
public void setmIsIntercept(boolean mIsIntercept) {
this.mIsIntercept = mIsIntercept;//这个是提供的一个外部的一个入口,来判断父布局是否拦截当前的事件
}
}
默认拦截事件,则事件不下发到输入框,
同时xml文件中的布局为:
android:descendantFocusability="beforeDescendants":viewgroup会优先其子类控件而获取到焦点