2016-03-21 12 views
0

Ich habe eine Recycler-Ansicht, in der ich ein Element bevölkern und in jedem Element bestimmte Elemente sind behoben, aber es gibt auch einige Details, die zur Laufzeit gefüllt sind, ich meine für ein Element es kann 3 detaillierte Ansicht für einige 10 und für einige 2 geben. Wie Ansichten in dem Element zur Laufzeit erstellt werden, ist die Recyclerview Scrolling langsam und Ruck beobachtet wurde.Optimale Möglichkeit, Daten in RecyclerView Artikel zur Laufzeit

Derzeit bin ich ein LinearLayout Container, in dem i Artikel bevölkern container#addView(view)

Bitte legen nahe, unter Verwendung eines beliebigen optimalen Weg, um das gleiche zu tun.

Vielen Dank im Voraus.

+0

Verwenden Sie einen Adapter? – Shark

+0

Wenn Sie diese Option nur im Adapter verwenden, wenn Daten gefüllt werden müssen, wird sie zur Laufzeit geändert. –

Antwort

0

Der beste Weg, dies zu tun, ist die Einrichtung von Ansichtsarten.

Zuerst erstellen Sie mehrere Layout-XML-Dateien. Vielleicht haben Sie eine mit einer einzelnen Detailansicht, eine mit 2 Detailansichten, eine mit 3, eine mit 4 usw. Es gibt möglicherweise zu viele Variationen, um für jedes ein XML-Layout zu erhalten, aber Sie können 80% -90% abdecken von ihnen? Spezielle Layouts für die häufigsten Fälle verbessern die Leistung.

Dann überschreiben Sie in Ihrem Adapter getItemViewType(int position), um einen bestimmten int-Wert für jeden Ansichtstyp, den Sie haben, zurückzugeben. Nehmen wir an, Ihr Layout mit 3 Detailansichten ist viewType == 3 (bequem). Wenn dies mit Position 10 aufgerufen wird, betrachten Sie Ihre Daten an Position 10. Wenn Sie 3 Detailansichten benötigen, erhalten Sie einen viewType von 3.

Nun, wenn Ihre onCreateViewHolder Methode aufgerufen wird, haben Sie einen viewType Parameter um dir zu sagen, welche Sicht aufzublähen ist. Sie können eine switch-Anweisung erstellen, die bestimmte XML-Layouts basierend auf der Ansichtstyp-ID aufbläht.

Wie hilft das? Da die RecyclerView Ihre Ansichtstypen verfolgt und jedes Layout durch einen bestimmten Ansichtstyp identifiziert wird, kann die RecyclerView eine Ansicht dieses Ansichtstyps wiederverwenden, wenn Sie eine neue Ansicht benötigen. Also, wenn Sie eine Ansicht mit 3 Detailansichten benötigen, die RecyclerView hat sie unter viewType == 3 abgelegt und erhalten Sie eine ViewHolder bereit für Ihre Daten.

Probieren Sie es aus. Sie sollten einen sichtbaren Leistungsschub sehen.

+0

Danke Kris, werde es definitiv versuchen. –

Verwandte Themen