Ist es möglich, AbsListView zu erweitern, um neue ListView-Implementierungen vorzunehmen?

Lesezeit: 4 Minuten

Benutzeravatar von Nick Campion
Nick Campion

Wie viele andere Leute habe ich versucht, eine stilistisch andere Listenansicht zu erstellen, und ich habe damit begonnen, AbsListView zu erweitern. Gemäß dem Android-Dokument ist AbsListView:

Basisklasse, die verwendet werden kann, um virtualisierte Elementlisten zu implementieren. Eine Liste hat hier keine räumliche Definition. Beispielsweise können Unterklassen dieser Klasse den Inhalt der Liste in einem Raster, in einem Karussell, als Stapel usw. anzeigen.

Nach einiger Anstrengung und Überprüfung der ListView-Implementierung sieht es so aus, als ob es aufgrund der Kopplung der beiden Klassen und der Unfähigkeit, auf bestimmte Paketmitglieder zuzugreifen, möglicherweise nicht möglich ist, AbsListView so zu erweitern, wie ListView es tut. Ich bin über diese Form von Romain Guy gestolpert:

AbsListView und AbsSpinner sind so konzipiert, dass sie innerhalb des Frameworks erweitert werden können. Sie könnten auch in Apps von Drittanbietern erweitert werden, aber wir haben absichtlich nicht alle erforderlichen geschützten Felder und Methoden verfügbar gemacht. Wir möchten sehr vorsichtig sein, wie wir solche APIs verfügbar machen, um keine Daten für zukünftige Erweiterungen und interne Änderungen zu erhalten. Unsere aktuelle Empfehlung ist, dass Sie den benötigten Code einfach in Ihre App kopieren und einfügen.

Ich habe angefangen, dies zu versuchen, aber das Kopieren von AbsListView wird zu einem Kaninchenloch des Kopierens in ein paar andere Sachen, und es scheint wirklich nur ein verlorenes Geschäft zu sein. Ich wollte sehen, ob jemand Erfolg hatte, AbsListView zu erweitern, der eine Methodik teilen könnte.

[1] http://developer.android.com/reference/android/widget/AbsListView.html

[2] https://groups.google.com/forum/?fromgroups#!topic/android-developers/UhbR1tpVvF0

  • “Es scheint wirklich nur ein Verlustgeschäft zu sein” – das wäre meine Einschätzung der Situation.

    – CommonsWare

    10. März 2012 um 16:16 Uhr

  • Danke Markus. Das scheint mir auch das Evangelium zu sein.

    – Nick Campion

    10. März 2012 um 20:40 Uhr

  • Vielleicht könnten Sie etwas genauer sagen, was Sie mit “stilistisch anderer Listenansicht” meinen. Meinst du etwas, das keine vertikale Liste ist? oder meinen Sie etwas, das vertikal ist, aber benutzerdefinierte Farben, Ansichten, Kopfzeilen usw. hat?

    – mtmurdock

    2. Januar 2013 um 22:15 Uhr

  • Hier gibt es ein nettes Tutorial von Sony (obwohl sie AdapterView und nicht AbsListView erweitern): 1. developer.sonymobile.com/2010/05/20/… 2. developer.sonymobile.com/2010/05/31/… 3. developer.sonymobile.com/2010/06/23/…

    – Android-Entwickler

    16. Oktober 2013 um 22:39 Uhr

Der Posten stammt aus dem Jahr 2010, aber seine Einschätzung gilt noch heute. Bestimmte notwendige Methoden und Felder sind geschützt, um zukünftige Inkompatibilitäten zu vermeiden, die sich aus einer Änderung der Interna von AbsListView ergeben könnten.

Die beste Lösung besteht immer noch darin, den Code für AbsListView zusammen mit den erforderlichen Abhängigkeiten (das von Ihnen erwähnte Kaninchenloch) in Ihr Projekt zu kopieren.

Wenn Sie in der Zwischenzeit beschreiben möchten, welche Art von Ansicht Sie zu erstellen versuchen, können wir Sie möglicherweise in eine Richtung weisen, die etwas einfacher ist als die Erstellung Ihrer eigenen AbsListView?

  • Ich möchte eine Ansicht erstellen, die eine horizontale Listenansicht darstellt, eine Verbindung zu einem Adapter herstellt und Ansichten recycelt. Es muss scrollbar sein und Ansichten mit unterschiedlichen Breiten akzeptieren, obwohl es eine konsistente Höhe beibehalten sollte.

    – Nick Campion

    13. September 2012 um 21:31 Uhr

  • Ah. Vielleicht möchten Sie die Arbeit nutzen, die andere dafür bereits geleistet haben. Zum Beispiel gibt es eine halbwegs beliebte horizontale Listenansicht unter: github.com/dinocore1/DevsmartLib-Android/blob/master/…

    – Alexander Lukas

    13. September 2012 um 21:38 Uhr

  • Ja, das ist genau das, was ich benutze, aber um ganz ehrlich zu sein, es lässt viel zu wünschen übrig. Ich musste es stark modifizieren und ehrlich gesagt kann es aufgrund der Art und Weise, wie bestimmte Dateien in Android gepackt werden, nie die notwendigen Dinge tun. Naja, diesen Kampf kämpfe ich vorerst nicht mehr 😉

    – Nick Campion

    14. September 2012 um 0:58 Uhr

Benutzeravatar von Scott Leslie
Scott Leslie

Ich habe die gleiche Erfahrung gemacht, als ich versucht habe, Unterklassen zu erstellen ListView und AbsListView um eine scrollbare 2D-Tabelle zu entwickeln. Am Ende hatte ich meine eigene Unterklasse von ViewGroup die das Layout und eine Unterklasse von behandelt TwoDScrollView um das Scrollen zu handhaben. Die schwierigsten Teile sind es, Flings richtig funktionieren zu lassen (dh neue Ansichten zu erstellen und zu platzieren, bevor sie in die Ansicht scrollen) und die Ansichtspositionen zwischen scrollbaren Komponenten zu synchronisieren. Mit genügend Zeit ist es jedoch möglich, eine robuste Komponente zu erstellen, die Daten aus einem Cursor zieht und sie ziemlich reibungslos und schnell durchläuft.

1395260cookie-checkIst es möglich, AbsListView zu erweitern, um neue ListView-Implementierungen vorzunehmen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy