2017-06-13 5 views
0

Gibt es eine Möglichkeit zu verhindern, dass ein RecyclerView Ansichten löscht? Ich bin in einer Situation fest, wo ich Live-Offscreen-Ansichten benötigen, und wenn ich aus der Ansicht des Elements in einer RecyclerView scrollen, wird OnViewDetachedFromWindow aufgerufen.Gibt es eine Möglichkeit, zu verhindern, dass RecyclerView Ansichten aufhebt?

Der Anwendungsfall ist ein Multi-Stream-Videoplayer, der ein SDK verwendet, das leider Thread.Sleeps enthält und den Hauptthread verwenden muss, damit es nicht abstürzt. Ich habe keinen Zugriff auf die Interna dieses SDK, daher kann ich dieses Verhalten nicht ändern.

Das SDK erstellt jedes seiner Widgets, die von einem FrameLayout geerbt wurden, und wenn ich die zugrunde liegende Medienquelle nicht schließe, bekomme ich eine JNI-Ausnahme, die sich über eine verschwundene Oberfläche beschwert. Aus diesem Grund rufe ich SDK.close() in onViewDetachedFromWindow und SDK.open() in onViewAttachedToWindow auf.

Das Problem hier ist, dass, wenn ich Feeds durchfliege, gibt es ein sehr abgehacktes Scroll-Verhalten aufgrund der Haupt-Thread-Arbeit beim Öffnen/Schließen der SDK-Streams.

Zuvor hatte ich einen ViewPager mit einem großen Offscreen-Limit, der nach dem erstmaligen Laden aller Feeds (perfektes nahtloses Scrollen) hervorragend funktioniert. Allerdings muss ich jetzt verschiedene Betrachtungsmuster (ein Bildschirm auf einmal, 2x2 Gitter, etc.) zur Verfügung stellen, die ein großer Anwendungsfall für die LayoutManager sind und lästig sind, als ViewPagers zu erstellen (auch gibt es verschiedene Arten von Berührungsinteraktionen, die ich ' m nicht zu erwähnen - schwer in einem ViewPager zu verwalten).

Ich habe auch versucht, die SDK Öffnen und Schließen von Anrufen zu verzögern, bis Scrolling abgeschlossen ist - aber das führt zu seltsamen Verhalten sporadisch.

Auf der RecyclerView-Seite scheinen weder setItemViewCacheSize noch isRecycleable beim Trennen von Sichten keinen Unterschied zu machen. Ich habe auch versucht, getExtraLayoutSpace im LayoutManager zu überschreiben und es schien auch nicht das abgehackte Scrollen zu lösen.

Schließlich ist meine aktuelle Problemumgehung nur nur die PagerSnapHelper zu verwenden erlauben eine ‚Scroll-by-one‘ -Funktionalität ...

Antwort

0

der Halter anzeigen Einstellung isRecyclable property to false nicht den Trick tut?

+0

Nicht so weit, wie ich sehen kann, das hat mehr mit Recycling/Sammlung zu tun - anstatt Anfügen/Abnehmen zu sehen – SJoshi

Verwandte Themen