Dieses Handbuch baut auf der Paging Library auf und beschreibt, wie Sie Listen mit Informationen für Nutzer in der Benutzeroberfläche Ihrer App anzuzeigen, insbesondere wenn diese Änderungen an den Informationen.
UI mit Ihrem Ansichtsmodell verbinden
Sie können eine Verbindung
LiveData<PagedList>
in ein
PagedListAdapter
, wie gezeigt
im folgenden Code-Snippet einfügen:
Kotlin
class ConcertActivity : AppCompatActivity() { private val adapter = ConcertAdapter() // Use the 'by viewModels()' Kotlin property delegate // from the activity-ktx artifact private val viewModel: ConcertViewModel by viewModels() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState); viewModel.concerts.observe(this, Observer { adapter.submitList(it) }) } }
Java
public class ConcertActivity extends AppCompatActivity { private ConcertAdapter adapter = new ConcertAdapter(); private ConcertViewModel viewModel; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); viewModel = new ViewModelProvider(this).get(ConcertViewModel.class); viewModel.concertList.observe(this, adapter::submitList); } }
Da Datenquellen neue Instanzen
PagedList
, die Aktivität sendet
diese Objekte an den Adapter senden. Die
PagedListAdapter
-Implementierung definiert, wie Aktualisierungen berechnet werden, und verarbeitet sie automatisch
Paging und List diffing. Daher sind Ihre
ViewHolder
muss nur an ein bestimmtes bereitgestelltes Element gebunden werden:
Kotlin
class ConcertAdapter() : PagedListAdapter<Concert, ConcertViewHolder>(DIFF_CALLBACK) { override fun onBindViewHolder(holder: ConcertViewHolder, position: Int) { val concert: Concert? = getItem(position) // Note that "concert" is a placeholder if it's null. holder.bindTo(concert) } companion object { private val DIFF_CALLBACK = ... // See Implement the diffing callback section. } }
Java
public class ConcertAdapter extends PagedListAdapter<Concert, ConcertViewHolder> { protected ConcertAdapter() { super(DIFF_CALLBACK); } @Override public void onBindViewHolder(@NonNull ConcertViewHolder holder, int position) { Concert concert = getItem(position); // Note that "concert" can be null if it's a placeholder. holder.bindTo(concert); } private static DiffUtil.ItemCallback<Concert> DIFF_CALLBACK = ... // See Implement the diffing callback section. }
Die PagedListAdapter
verarbeitet Seitenladeereignisse mithilfe einer
PagedList.Callback
-Objekt enthält. Wenn der Nutzer scrollt, ruft PagedListAdapter
auf
PagedList.loadAround()
um Hinweise für die zugrunde liegende
PagedList
für
welche Elemente aus dem
DataSource
Differenzierten Callback implementieren
Im folgenden Beispiel sehen Sie eine manuelle Implementierung
areContentsTheSame()
,
der relevante Objektfelder vergleicht:
Kotlin
private val DIFF_CALLBACK = object : DiffUtil.ItemCallback<Concert>() { // The ID property identifies when items are the same. override fun areItemsTheSame(oldItem: Concert, newItem: Concert) = oldItem.id == newItem.id // If you use the "==" operator, make sure that the object implements // .equals(). Alternatively, write custom data comparison logic here. override fun areContentsTheSame( oldItem: Concert, newItem: Concert) = oldItem == newItem }
Java
private static DiffUtil.ItemCallback<Concert> DIFF_CALLBACK = new DiffUtil.ItemCallback<Concert>() { @Override public boolean areItemsTheSame(Concert oldItem, Concert newItem) { // The ID property identifies when items are the same. return oldItem.getId() == newItem.getId(); } @Override public boolean areContentsTheSame(Concert oldItem, Concert newItem) { // Don't use the "==" operator here. Either implement and use .equals(), // or write custom data comparison logic here. return oldItem.equals(newItem); } };
Da der Adapter Ihre Definition für den Vergleich von Artikeln enthält,
erkennt automatisch Änderungen an diesen Elementen, wenn ein neues PagedList
-Objekt
geladen. Daher löst der Adapter effiziente Elementanimationen innerhalb der
RecyclerView
-Objekt.
Unterschied bei Verwendung eines anderen Adaptertyps
Wenn Sie festlegen, dass
PagedListAdapter
– z. B.
wenn Sie eine Bibliothek mit einem eigenen Adapter verwenden, können Sie weiterhin den
Die unterschiedlichen Funktionen des Paging Library-Adapters können Sie direkt mit einem
AsyncPagedListDiffer
-Objekt enthält.
Platzhalter in Ihrer Benutzeroberfläche bereitstellen
Wenn Sie möchten, dass auf Ihrer Benutzeroberfläche eine Liste angezeigt wird, bevor die Anwendung fertig ist
Abrufen von Daten können Sie Ihren Nutzern Platzhalterlistenelemente anzeigen. Die
PagedList
kümmert sich um diesen Fall
Die Listenelementdaten werden als null
dargestellt, bis die Daten geladen sind.
Platzhalter haben folgende Vorteile:
- Unterstützung für Bildlaufleisten:Der
PagedList
gibt die Anzahl der die Elemente der ListePagedListAdapter
Dieses kann der Adapter eine Bildlaufleiste zeichnen, die die auf der Liste. Beim Laden neuer Seiten springt die Bildlaufleiste nicht, unverändert. - Kein Ladesymbol erforderlich:Da die Größe der Liste bereits bekannt ist, müssen Nutzende nicht darauf hingewiesen werden, dass weitere Elemente geladen werden. Die Platzhalter diese Informationen zu vermitteln.
Bevor Sie jedoch Unterstützung für Platzhalter hinzufügen, sollten Sie Folgendes beachten: Voraussetzungen erfüllen:
- Erfordert ein zählbares Dataset: Instanzen von
DataSource
aus dem Raum Persistenzbibliothek effizient zählen, ihre Artikel. Wenn Sie eine benutzerdefinierte lokale Speicherlösung oder eine ausschließlich Netzwerk- Datenarchitektur, Es kann jedoch teuer oder sogar unmöglich sein, zu ermitteln, wie viele Artikel aus Ihrem Dataset besteht. - Für nicht geladene Elemente ist ein Adapter erforderlich: Der Adapter oder
Präsentationsmechanismus, mit dem Sie die Liste für die Inflation erstellen,
mit Null-Listenelementen umgehen. Wenn zum Beispiel Daten an eine
ViewHolder
, müssen Sie Standardwerte zur Darstellung nicht geladener Daten angeben. - Ansichten für gleich große Elemente erforderlich:Die Größe der Listenelemente kann sich je nach zum Beispiel Updates in sozialen Netzwerken oder das Überblenden von Inhalten sieht nicht gut aus. Wir empfehlen Ihnen dringend, die Platzhalter in diesem Fall zu deaktivieren.
Feedback geben
Wir freuen uns über dein Feedback und deine Ideen:
- Problemverfolgung
- Melde Probleme, damit wir sie beheben können.
Weitere Informationen
Weitere Informationen zur Paging Library finden Sie in der in den folgenden Ressourcen.
Produktproben
- Seitenumbruch für Android-Architekturkomponenten Beispiel
- <ph type="x-smartling-placeholder"></ph> Beispiel für Paging mit Netzwerk
Codelabs
- <ph type="x-smartling-placeholder"></ph> Codelab zum Paging unter Android
Videos
- <ph type="x-smartling-placeholder"></ph> Android Jetpack: Unbegrenzte Listen mit RecyclerView und Paging verwalten (Google I/O 2018)
- <ph type="x-smartling-placeholder"></ph> Android Jetpack: Paging
Empfehlungen für dich
- Hinweis: Der Linktext wird angezeigt, wenn JavaScript deaktiviert ist.
- Paging 2 Library – Übersicht
- Zu Paging 3 migrieren
- Auslagerungsdaten erfassen