Reputation: 3465
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.
Upvotes: 15
Views: 22503
Reputation: 1725
Hope this helps :
Add this line to your recyclerView xml :
android:nestedScrollingEnabled="false"
Try it ,recyclerview will be smoothly scrolled with flexible height inside scrollview .
Upvotes: 0
Reputation: 3760
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.
Upvotes: 7
Reputation: 20426
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:
RecyclerView
ScrollView.fillViewport
to true
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
.Upvotes: 23
Reputation: 6428
Set this property for the ScrollView,
android:fillViewport="true"
ScrollView will extend itself to fill the contents
Upvotes: 36