I have a RecyclerView which is in a CardView that has a couple of TextViews. The CardView has a OnClickListener
set and is fired off when clicking on the TextViews, but does not fire when clicking on the RecyclerView.
Here is what the CardView looks like:
<?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:card_view="http://schemas.android.com/apk/res-auto" android:id="@+id/card_view" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_margin="5dp" card_view:cardCornerRadius="4dp" card_view:cardElevation="5dp"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:weightSum="100" android:minWidth="100dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:id="@+id/text1" android:textColor="@color/abc_primary_text_material_light" android:layout_weight="1" android:layout_gravity="center_horizontal" /> <android.support.v7.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="0dp" android:listSelector="@color/highlighted_text_material_light" android:layout_weight="98" /> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="@android:color/black" /> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/relativeSummary" android:orientation="horizontal" android:layout_weight="1"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:id="@+id/text2" android:textAlignment="viewEnd" android:textColor="@color/abc_secondary_text_material_light" android:layout_marginLeft="5dp" android:layout_marginRight="5dp" android:gravity="start" android:singleLine="true" android:layout_alignParentLeft="true" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:id="@+id/text3" android:textColor="@color/abc_primary_text_material_light" android:layout_marginRight="5dp" android:layout_marginLeft="5dp" android:gravity="end" android:singleLine="true" android:layout_alignParentRight="true" android:layout_toRightOf="@+id/text2" /> </RelativeLayout> </LinearLayout> </android.support.v7.widget.CardView>
I do not need a click listener on this RecyclerView and really only need the parent view's click event to fire when the RecyclerView is clicked (The same goes for the OnLongClick event). I also need the RecyclerView to scroll. Is the RecyclerView some how eating the click event and not passing it up to the parent?
There is a better solution. That is, subclass your CardView
:
public class InterceptTouchCardView extends CardView { public InterceptTouchCardView(Context context) { super(context); } public InterceptTouchCardView(Context context, AttributeSet attrs) { super(context, attrs); } public InterceptTouchCardView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } /** * Intercept touch event so that inner views cannot receive it. * * If a ViewGroup contains a RecyclerView and has an OnTouchListener or something like that, * touch events will be directly delivered to inner RecyclerView and handled by it. As a result, * parent ViewGroup won't receive the touch event any longer. */ @Override public boolean onInterceptTouchEvent(MotionEvent ev) { return true; } }
recyclerView.setLayoutFrozen(true);
just setLayoutFrozen true after setAdapter for recyclerView
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With