RecyclerView inside ScrollView is not working
use NestedScrollView
instead of ScrollView
Please go through NestedScrollView reference document for more information.
and add recyclerView.setNestedScrollingEnabled(false);
to your RecyclerView
I know I am late it the game, but the issue still exists even after google has made fix on the android.support.v7.widget.RecyclerView
The issue I get now is RecyclerView
with layout_height=wrap_content
not taking height of all the items issue inside ScrollView
that only happens on Marshmallow and Nougat+ (API 23, 24, 25) versions.
(UPDATE: Replacing ScrollView
with android.support.v4.widget.NestedScrollView
works on all versions. I somehow missed testing accepted solution. Added this in my github project as demo.)
After trying different things, I have found workaround that fixes this issue.
Here is my layout structure in a nutshell:
<ScrollView> <LinearLayout> (vertical - this is the only child of scrollview) <SomeViews> <RecyclerView> (layout_height=wrap_content) <SomeOtherViews>
The workaround is the wrap the RecyclerView
with RelativeLayout
. Don't ask me how I found this workaround!!! ¯\_(ツ)_/¯
<RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:descendantFocusability="blocksDescendants"> <android.support.v7.widget.RecyclerView android:layout_width="match_parent" android:layout_height="wrap_content" /></RelativeLayout>
Complete example is available on GitHub project - https://github.com/amardeshbd/android-recycler-view-wrap-content
Here is a demo screencast showing the fix in action:
Although the recommendation that
you should never put a scrollable view inside another scrollable view
Is a sound advice, however if you set a fixed height on the recycler view it should work fine.
If you know the height of the adapter item layout you could just calculate the height of the RecyclerView.
int viewHeight = adapterItemSize * adapterData.size();recyclerView.getLayoutParams().height = viewHeight;