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.
Verwenden Sie einen Adapter? – Shark
Wenn Sie diese Option nur im Adapter verwenden, wenn Daten gefüllt werden müssen, wird sie zur Laufzeit geändert. –