I followed this tutorial to implement the behaviors for both hiding the toolbar and the FAB when scrolled: https://mzgreen.github.io/2015/06/23/How-to-hideshow-Toolbar-when-list-is-scrolling(part3)/
I have pasted a demo of what the behavior looks like below.
Now instead of those individual items within the recyclerview in the tabs holding just a textView, I have coded it so that they hold a picture (ImageView) and below it, a recyclerview showing a list of items.
Hence, there is an outer recyclerview that contains a list of inner recyclerviews.
The inner recyclerview does not scroll - I disabled it by following the answer in this thread by overriding the method canScrollVertically(): Disable Scrolling in child Recyclerview android. I also tried enabling the scrolling for the inner recyclerview, but I experienced the same problem.
The outer recyclerview does scroll and has the behavior that shows/hides the toolbar and the FAB.
When I scroll by holding onto the picture (ImageView), the app behavior works perfectly fine, showing and hiding the toolbar and FAB. However, when I have my finger on the inner recyclerview to scroll, the outer recyclerview scrolls and the list moves up and down, but the behavior of show/hiding the toolbar and FAB is never activated.
I have a feeling that this is because the inner recyclerview had intercepted the scroll and the outer recyclerview did not get the scroll event to activate the behavior.
Does anyone know how to make sure the outer recyclerview also gets the scroll event so that the behavior works?
A RecyclerView. ViewHolder class which caches views associated with the default Preference layouts. A ViewHolder describes an item view and metadata about its place within the RecyclerView. RecyclerView. Adapter implementations should subclass ViewHolder and add fields for caching potentially expensive View.
It's pretty simple, simply set the RecyclerView 's height to wrap_content . That's right.
card view inside the ScrollView (now ScrollView contains RecyclerView ) - can see the card up until the RecyclerView. initial thought was to implement this viewGroup using RecyclerView instead of ScrollView where one of it's views type is the CardView but i got the exact same results as with the ScrollView.
Hank Moody comment actually lead me to the correct answer - thanks Hank!
This is how I solved my problem:
Create a 'Scroll Through' recyclerview where the parent will receive all the scroll events of the child by doing this:
public class ScrollThroughRecyclerView extends RecyclerView {
public ScrollThroughRecyclerView(Context context) {
super(context);
}
public ScrollThroughRecyclerView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ScrollThroughRecyclerView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev){
//true - block scrolling of child and allow scrolling for parent recycler
return true;
}
}
Use this custom recyclerview in your xml or in your java code and the scroll events will be passed correctly to your parent recyclerview which will activate the app scrollbehavior.
if you want put one vertical recycler in another vertical you must set fixed height for child recycler view, or try to overwrite this method
@Override
public boolean dispatchTouchEvent(MotionEvent ev){
//false - block scrolling of parent recycler and allow scrolling for child
return false;
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With