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.
Set this property for the ScrollView,
android:fillViewport="true"
ScrollView will extend itself to fill the contents
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
totrue
- Or keep
RecyclerView
outside ofScrollView
. I my opinion, this is the best option by far. IfRecyclerView
height is not limited - which is the case when it's put intoScrollView
- 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 ofRecyclerView
.
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.
Using RecyclerView inside ScrollView is not a good practice.
When RecyclerView is wrapping its content, it’s not recycling anymore. Every record in the dataset has an item View kept in memory for as long as the RecyclerView is in the layout hierarchy.
Read more here - https://android.jlelse.eu/android-dev-tip-4-91b7757b1f0a
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 .
来源:https://stackoverflow.com/questions/25515904/android-recyclerview-inside-a-scrollview