android: RecyclerView inside a ScrollView

22,113

Solution 1

Set this property for the ScrollView,

 android:fillViewport="true"

ScrollView will extend itself to fill the contents

Solution 2

After checking implementation, the reason appears to be the following. If RecyclerView gets put into a ScrollView, then during measure step its height is unspecified (because ScrollView allows any height) and, as a result, gets equal to minimum height (as per implementation) which is apparently zero.

You have couple of options for fixing this:

  • Set a certain height to RecyclerView
  • Set ScrollView.fillViewport to true
  • Or keep RecyclerView outside of ScrollView. I my opinion, this is the best option by far. If RecyclerView height is not limited - which is the case when it's put into ScrollView - then all Adapter's views have enough place vertically and get created all at once. There is no view recycling anymore which kinda breaks the purpose of RecyclerView.

Solution 3

Nothing helped me except this:

mRecyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
    @Override
    public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
        int action = e.getAction();
        switch (action) {
        case MotionEvent.ACTION_MOVE:
            rv.getParent().requestDisallowInterceptTouchEvent(true);
            break;
    }
    return false;
}

@Override
public void onTouchEvent(RecyclerView rv, MotionEvent e) {

}

@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {

    }
});

I got this answer there. Thank you Piyush Gupta for that.

Share:
22,113
nomongo
Author by

nomongo

Updated on June 28, 2020

Comments

  • nomongo
    nomongo about 4 years

    I have a RecyclerView wrapped in a LinearLayout and it works perfectly as expected. I can see all the data in the RecyclerView as populated. So far so good.

    When I wrap the LinearLayout in a ScrollView, the RecyclerView goes blank. I do not see anything inside RecyclerView. Why? How to make this work.

    The page is one of the tabs in a ViewPagerIndicator, so everything in that tab needs to be in a ScrollView.

    Thanks for all the help.

  • Jemshit Iskenderov
    Jemshit Iskenderov about 9 years
    @beworker i have 2 RecyclerViews and even i give certain heights, they won't be all visible when in landscape, so RecyclerView inside ScrollView becomes necessary
  • SilentKnight
    SilentKnight almost 9 years
    It worked for me, but sometimes NullPointerException occurred.
  • Sathesh
    Sathesh almost 9 years
    I would appreciate if you can provide a stack trace.
  • Jemshit Iskenderov
    Jemshit Iskenderov almost 9 years
    Don't confuse with fitsSystemWindows="true" guys
  • dasar
    dasar almost 9 years
    Perfect point. So recyclerView inside ScrollView can be replaced with some static view container.
  • Khawar Raza
    Khawar Raza over 7 years
    I had a similar problem. I was using Recyclerview inside Recyclerview items. The inner Recyclerview was not scrolling at all. Your solution worked for me.