当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会优先其子类控件而获取到焦点
博客介绍了如何处理RecyclerView的Item内包含EditText时点击事件冲突的问题。通过自定义LinearLayout,设置一个控制是否拦截点击事件的变量mIsIntercept,根据需求决定是否拦截触摸事件。在XML布局中使用android:descendantFocusability属性确保输入框能获取焦点。
2085

被折叠的 条评论
为什么被折叠?



