Ich möchte den Unterschied zwischen BaseAdapter
und kennen ArrayAdapter
.
Ich habe erreicht, was ich will ArrayAdapters
.
Beeinträchtigt es die Leistung ListView
der Adapterschnittstelle, in der es implementiert ist?
Und die letzte Frage ist, kann ich irgendetwas erreichen, wenn ich ListView
eines davon benutze Adapters
, oder gibt es bestimmte Fälle, in denen nur ein bestimmter Adapter verwendet werden kann?
android
performance
listview
android-arrayadapter
baseadapter
Chintan Soni
quelle
quelle
Antworten:
Hier ist der Unterschied:
BaseAdapter
ist ein sehr allgemeiner Adapter, mit dem Sie so ziemlich alles tun können, was Sie wollen. Sie müssen jedoch etwas mehr selbst programmieren, damit es funktioniert.ArrayAdapter
ist eine vollständigere Implementierung, die für Daten in Arrays oderArrayList
s gut funktioniert . Ebenso gibt es einen verwandtenCursorAdapter
, den Sie verwenden sollten, wenn sich Ihre Daten in einem befindenCursor
. Beide erstrecken sichBaseAdapter
.Wenn sich Ihre Daten in einer speziellen Sammlung befinden oder wenn Sie nicht das Standardverhalten wünschen, das bereitgestellt
ArrayAdapter
wird, möchten Sie wahrscheinlich erweiternBaseAdapter
, um die Flexibilität zu erhalten, die Sie benötigen.Die Leistung jedes einzelnen hängt wirklich davon ab, wie Sie sie implementieren oder ihr Verhalten ändern. Im Kern kann entweder eine sein ebenso wirksam (besonders wenn man bedenkt , dass ein
ArrayAdapter
ist einBaseAdapter
).Sie können mit jedem Adapter so ziemlich alles tun, was Sie wollen, aber denken Sie daran, dass dies
BaseAdapter
abstrakt ist, sodass Sie es nicht direkt verwenden können.quelle
ArrayAdapter
(wie von @ tanis-7x erwähnt) ist, dassTextView
das Listenelement nur 1 enthalten kann , was tatsächlich ein sehr begrenztes Verhalten darstellt. Wenn in jedem Listenelement mehrere Steuerelemente vorhanden sind, müssen SieBaseAdapter
und für den Job selbst verwenden. Natürlich können Sie noch verwendenArrayAdapter
, daArrayAdapter
es sich um eine handeltBaseAdapter
.BaseAdapter
ist abstrakt währendArrayAdapter
erweitertBaseAdapter
(es ist eine konkrete Implementierung von aBaseAdapter
). Wenn Sie erweitern, weilArrayAdapter
Sie alleArrayAdapter
Funktionen von erben , und die Implementierung überschreiben, können Sie dasArrayAdapter
Verhalten ändern . Wenn Sie erweiternBaseAdapter
, müssen Sie alle Abstract-Methoden implementieren, die ArrayAdapter bereits implementiert.Nein, tut es nicht.
Wenn die Implementierung im SDK Ihren Anforderungen entspricht, warum müssen Sie sie überschreiben und das Rad neu erfinden?
Der Hauptunterschied zwischen ihnen ist, dass
BaseAdapter
nicht instanziiert werdenArrayAdapter
kann, während kannquelle
Als Antwort auf Ihre 3 Fragen:
(1) BaseAdapter ist laut Android-Dokumentation nur eine Oberklasse einer Reihe von Adaptertypen , von denen einer ist
ArrayAdapter
. Es gibt eine Reihe anderer Adapter, die davon abgeleitet sind undBaseAdapter
für andere Zwecke geeignet sind. Infolgedessen ist es unwahrscheinlich, dass zwischen beiden ein Unterschied in der Effizienz besteht. Sie erhalten nur Zugriff auf verschiedene Funktionen / Methoden mit den verschiedenen Unterklassen.(2) Die Effizienz Ihrer
ArrayAdapter
Arbeit hängt von der Effizienz Ihrer Arbeit in dieser Klasse ab, dh von der Verarbeitung von Bitmaps und anderen Daten.(3) Sie könnten wahrscheinlich einen Weg finden, wie Sie
ListView
mit einem anderen Adapter arbeiten können. Der Grund dafürArrayAdapter
ist jedoch, dass dies normalerweise sinnvoll ist, da das Ziel darin besteht, eine interaktive Liste zu erstellen. DasArrayAdapte
nimmt einArray
, normalerweise einesArrayList
von Objekten, das es dann verarbeitet, um die Hintergrundinformationen für das zu erstellenListView
. In diesem Sinne ist die Einrichtung vonArrayList
->ArrayAdapter
->ListView
nur logisch sinnvoll.quelle
Ein weiterer Unterschied zwischen BaseAdapter und ArrayAdapters besteht darin, dass Sie beim Erweitern des Array-Adapters den Superklassenkonstruktor im Unterklassenkonstruktor aufrufen müssen.
Es gibt jedoch keine Superklasse für BaseAdapter. Als BaseAdapter dient als Superklasse für alle anderen Adapter
quelle
List<T> UserList;
in der Klasse verwenden, die erweitertArrayAdapter<T>
Hier können wir BaseAdapter nicht wie ArrayAdapter verwenden.
quelle
BaseAdapter
s sind minimaler und anpassbar.ArrayAdapter
s implementieren die allgemeinsten Verwendungen vonListAdapter
s, aber manchmal reichen sie nicht aus.Mit
ArrayAdapter
s kann jedoch fast alles erreicht werden . Wenn Ihre Listen bereits mit ArrayAdapter korrekt funktionieren, können Sie mit BaseAdapter nichts gewinnen.Wenn Sie jedoch Ihre oder Ihre ArrayAdapter-Implementierung speichern
Context
, möchten Sie möglicherweise zu , as wechselnArrays
Lists
BaseAdapter
ArrayAdapter
bereits implementiert sind.Wenn Sie dies tun, können Sie diese Elemente jederzeit entfernen und verwenden
getItem()
, um die Array-Elemente abzurufen,getCount()
die Größe des Arrays zu ermitteln undgetContext()
Ihre Ansichten zu vergrößern .quelle