当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文件中的布局为:
<androidx.constraintlayout.widget.ConstraintLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="@dimen/dimen_5dp" android:descendantFocusability="beforeDescendants" android:orientation="vertical"> <com.xiaoliu.prescription.widget.CustomLinearLayout
android:descendantFocusability="beforeDescendants":viewgroup会优先其子类控件而获取到焦点