Issue
I have a parent recyclerview that has 3 child view in it. The last two of the child are recyclerview.
Parent recyclerview
- child view 1
- child view 2 (horizontal rv)
- child view 3 (horizontal rv)
The issue is every time this fragment is visible, it scrolls itself to align with child view 2
's bottom.
I have set the parent rv to listen for scroll. This is what I end up with:
dy: 108
dy: 72
dy: 75
dy: 62
dy: 48
dy: 42
dy: 34
dy: 27
dy: 22
dy: 16
dy: 12
dy: 10
dy: 7
dy: 5
dy: 3
dy: 3
dy: 1
dy: 1
dy: 1
It seems like the starting dy
of parent recyclerview is set to 0
to the child view 2
rv. Everything above it is in -ve value. However, I'm not sure if this was the case as I'm still finding out what causes it.
Any fix?
Solution
We have a similar problem. We have a vertical RecyclerView
. Each item of this vertical RecyclerView
contains an horizontal RecyclerView
, like in the Android TV app.
When we upgraded the support libs from 23.4.0 to 24.0.0 the automatic scroll suddenly appeared. In particular, when we open an Activity
and we then go back, the vertical RecyclerView
scrolls up so that the current horizontal RecyclerView
row does not get cut and the row is displayed completely.
There is an easy fix. Add this to your outer/parent RecyclerView
:
android:descendantFocusability="blocksDescendants"
I've found the solution in this questions:
- nested scrollview + recyclerview, strange autoscroll behaviour
- Android prevent nested recyclerview from automatically repositioning
Additionally, I've found another solution, which also works. In our case the vertical RecyclerView
is contained inside a FrameLayout
. If I add android:focusableInTouchMode="true"
to this FrameLayout
, the problem goes away.
By the way, there is also an open issue on the AOSP.
Answered By - Albert Vila Calvo
Answer Checked By - Timothy Miller (JavaFixing Admin)