Search code examples
androidandroid-recyclerviewnestedrecyclerview-layoutnestedrecyclerview

Nested Horizontal RecyclerView


I wanna create a nested RecyclerView were the Parent RV is horizontal layout manager with > 3 items and the child is horzinotl too, but I can't scroll the child it's only indicate the parent gesture.

Parent LayoutManager

 LinearLayoutManager layoutManager = new LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false);
    listItem.setLayoutManager(layoutManager);
    listItem.setAdapter(adapter);

Child LayoutManager

 RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false);
    list.setHasFixedSize(true);
    list.setLayoutManager(layoutManager);
    list.setItemAnimator(new DefaultItemAnimator());
    list.setAdapter(adapter);

XML - Parent

  <androidx.cardview.widget.CardView
        android:id="@+id/card"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/list_item"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:clipToPadding="false" />

    </androidx.cardview.widget.CardView>

XML - Parent Item

     <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/roundColor_svprogresshuddefault"
    android:elevation="160dp"
    android:padding="@dimen/home_cell_margin">


                <androidx.recyclerview.widget.RecyclerView
                    android:id="@+id/list_item"
                    android:layout_width="wrap_content"
                    android:layout_height="150dp"
                    android:layout_gravity="center"
                    android:nestedScrollingEnabled="false" />
 </androidx.constraintlayout.widget.ConstraintLayout>

XML - Child

<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/listHolder">
    <ImageView
        android:id="@+id/img"
        android:layout_width="match_parent"
        android:layout_height="match_parent" ></ImageView>
</LinearLayout>

Result Example

Example


Solution

  • I fixed it by creating a simple custom RecyclerView and below the final code

    public class DJHRecyclerView extends RecyclerView {
        public DJHRecyclerView(Context context) {
            super(context);
        }
    
        public DJHRecyclerView(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
        public DJHRecyclerView(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
        }
    
        @Override
        public boolean onInterceptTouchEvent(MotionEvent event) {
            getParent().requestDisallowInterceptTouchEvent(true);
            return super.onInterceptTouchEvent(event);
        }
    
    }