0

Meine Datenbank hat 2 Tabellen wie Tabelle "A" und Tabelle "B". "B" hat eine Fremdschlüsselspalte zu "A". Jetzt lade ich alle meine Daten der Tabelle "A" mit einem CursorLoader. Um mehr Infos in meinem RecyclerView anzuzeigen, möchte ich für jede Zeile die referenzierenden Daten aus Tabelle "B" laden, aber faul. Um die Anfangslast schnell zu machen und nur Daten zu laden, die ich brauche. Die andere Möglichkeit besteht darin, Tabelle "A" und "B" zu verbinden und diese mit einem CursorLoader zu laden, aber dann muss ich meine Daten teilen, weil ich mehrere ähnliche Zeilen der Tabelle "A" mit mehreren entsprechenden Zeilen in der Tabelle haben kann "B".Lazy ContentProvider laden in RecyclerView

Hat jemand ähnliches Problem oder irgendwelche Infos zu diesem Thema?

+0

Es ist überhaupt kein Problem. Und vergleichbar mit dem direkten Platzieren von Text und der fliegenden Bildlast danach. Dass Sie Text statt Bilder laden, spielt keine Rolle. – greenapps

+0

Aber verlangsamt es wirklich so sehr, wenn Sie es direkt laden? – greenapps

+0

Die Leistungssteigerung wurde durch die Verwendung von Lazy Load erheblich verbessert. Wir sprechen über 1000 Artikel in Tabelle "A". Aber eigentlich interessiert mich mehr, wie man mehr Daten in einem RecyclerView von einem ContentProvider laden kann. Tatsächlich blockiere ich die ui, indem ich getContentResolver.query() aufruft. Es ist schnell, aber nicht der beste Weg. Es muss mehr wie Glide oder Picasso sein, die die Position des Gegenstandes verfolgen und wissen, ob sie bereits außer Reichweite ist. – Happo

Antwort

0

Der erste Weg, um ein nettes Lazy Loading zu haben, wäre, zuerst zu wissen, wie viele von Bs Sie für jedes A haben würden (ich bin sicher, dass Sie diese Information in Ihrer ersten Anfrage einfach hinzufügen könnten).

Auf diese Weise sind in der Recycler-Ansicht die Zeilen für Lazy-Loaded-Daten bereits vorhanden.

Zum zweiten Mal verwende ich einen asynchronen Lademechanismus (einen Android Loader oder eine Rx-Operation, je nachdem, was Sie bevorzugen), um die Daten tatsächlich zu laden, wenn sie angezeigt werden müssen.