Ich habe eine vertikale RecyclerView in einem CoordinatorLayout gehostet, die ein kollabierendes Toolbarlayout enthält. Der ViewHolder für diese RecyclerView enthält noch einen RecyclerView mit einem GridLayoutManager.
Der Grund für diese Verschachtelung ist, dass der innere RecyclerView eine Sammlung von Bildern anzeigt, die zwischen 1 - 20 Bilder haben können. Ich weiß nicht, wie viele Bilder es geben wird, aber die Spannweite des Rasters muss immer 3 betragen. Jedes Mal, wenn ich den ViewHolder binde, passe ich die Layoutparameter des RecyclerView an, um den Inhalt aufzunehmen.
Dies funktioniert hervorragend, wenn CollapsingToolBarLayout nicht vorhanden ist. Wenn jedoch eine zusammenklappbare Werkzeugleiste vorhanden ist, scrollt das Scrollen mit dem Finger auf der inneren RecyclerView nicht durch die Symbolleiste "Minimieren". Das Scrollen auf einem anderen Element funktioniert jedoch nicht.
Wenn ich im gebundenen ViewHolder wieder emphasisiere, scrollt das Scrollen gut, wenn ich mit einem anderen Objekt neben der verschachtelten RecyclerView scrolle. Wenn ich jedoch mit dem Scrollen auf der verschachtelten RecyclerView beginne, bricht es ab.
Ist es möglich, Scroll-Interception auf der inneren RecyclerView zu verhindern und nur den Parent scrollen zu lassen? Ich möchte, dass der innere RecyclerView trotzdem mit Klicks klarkommt.
Hier ist ein YouTube-Link für das Phänomen: Ссылка
Hier ist das XML für den übergeordneten RecyclerView:
%Vor%
Hier ist der primäre ViewHolder, der die verschachtelte RecyclerView hostet:
%Vor%}
Schließlich ist hier der Adapter für das verschachtelte Kind mit dem Bild:
%Vor%}
Ich hatte das gleiche Problem mit RecyclerView und CollapsingToolbarLayout, wo sich RecyclerView in einem NestedScrollView-Child-Layout befand.
Für mich war die Lösung programmgesteuert:
%Vor%Hinweis: Ich habe versucht, dies auf der RecyclerView in XML zu setzen, aber es hat nicht funktioniert?
%Vor%Ein weiterer Trick, um den CollapsingToolbarLayout -Scroll zu machen, besteht darin, einen Wert von 1000dp min height auf den untergeordneten Wert von NestedScrollView
%Vor%warum 1000dp? SupportDesignDemos Beispiel hier: Ссылка
Also, während das obige noch immer zutrifft, habe ich einen Workaround gefunden.
Die Problemumgehung umfasst das Umschließen des ViewHolder RecyclerView in einem RelativeLayout und das Überlagern einer transparenten klickbaren Ansicht darüber. In meinem Fall habe ich eine TextView verwendet.
Jetzt, während das Scrollen behoben ist, gibt es immer noch das Problem, Klicks an den richtigen ViewHolder in der ViewHolderRecyclerView zu übergeben. Um diesen zweiten Nachteil zu umgehen, habe ich die GestureDetector.SimpleOnGestureListener-Klasse um eine RecyclerView erweitert. Dann setze ich einen OnTouchListener auf der wrapperTextView, die dann das MotionEvent an die GestureDetector.SimpleOnGestureListener-Unterklasse weiterleitet.
Die Unterklasse interpretiert schließlich das Bewegungsereignis und übergibt es an die innere RecyclerView, die wiederum aus den Koordinaten des Klicks die angeklickte Kinderansicht herausfindet und performClick () auf dem Kind aufruft.