RecyclerView: Wie lösche ich zwischengespeicherte / recycelte Ansichten?

Ich verwende eine RecyclerView, um eine Liste von Elementen mit einem Listenlayout anzuzeigen. Ich wechsle von einem Listenlayout zu einem Rasterlayout und zeige im Rasterlayout nur eine Teilmenge aller Daten. Dieser Schalter verwendet ein anderes XML-Layout als das Listenlayout.

All dies funktioniert gut, mit der Ausnahme, dass beim Scrollen wiederverwendete (zwischengespeicherte?) Listenlayoutansichten das Raster mit den entsprechenden Elementen der Rasterlayoutansicht füllen. Mit anderen Worten, anstatt mein @ zu verwendlayout_grid.xml Für das Layout jedes Elements in der RecyclerView erhalte ich Elemente, die das @ verwendelayout_list.xml Layout, aber in einem Rasterformat.

Dies teilt mir mit, dass der LayoutManager ordnungsgemäß funktioniert und von einer Liste zu einem Rasterlayout wechselt. Es werden jedoch nicht alle Elemente der Elementansicht mit dem Raster-XML-Layout neu erstellt, sondern Ansichten mit wiederverwendeten Listenlayouts.

Ich habe es versuchtRecyclerView.removeAllViews(), RecyclerView.removeAllViewInLayout(), RecyclerView.swapAdapter() (um das Neuladen des Adapters zu erzwingen), alles ohne Erfolg.

Aktualisieren

Wenn ich zwei Positionen in der Liste nach unten scrolle und dann von der Liste zum Raster wechsle, gehen die ersten beiden Positionen nicht über onCreateViewHolder (), sondern direkt über onBindViewHolder () und sind daher nicht gezwungen, das Rasterlayout xml zu verwenden. Stattdessen werden diese ersten beiden Positionselemente recycelt (glaube ich) und in ihrem Listenlayoutformat angezeigt.

Antworten auf die Frage(14)

Ihre Antwort auf die Frage