Ich bin dabei, einen benutzerdefinierten Adapter zu schreiben, um eine Listenansicht mit drei Textansichten pro Zeile zu füllen. Ich habe eine Menge Beispielcode dafür gefunden, aber der, der am besten erschien, war: Ссылка
Nach ein paar kleineren Verbesserungen, die einige Compiler-Probleme mit dem neuesten Android SDK beheben, habe ich es ausgeführt, nur um die Ausnahme zu bekommen:
FEHLER / AndroidRuntime (281): java.lang.UnsupportedOperationException: addView (Ansicht, LayoutParams) wird nicht in AdapterView
unterstützt
Also habe ich viel recherchiert und viele mögliche Gründe und Korrekturen dafür gefunden. Nichts davon hat etwas verändert. Mein Adaptercode ist momentan:
%Vor%Also habe ich den auskommentierten Weg ausprobiert, um den Inflator zu bekommen, und den momentan unkommentierten. Ich habe versucht, "Elternteil" zu übergeben, sowie Null, und "wahr", "falsch" zu übergeben und vollständig den letzten Parameter wegzulassen. Keiner von ihnen hat funktioniert, und alle Beispiele, die ich bisher gefunden habe, stammen aus dem Jahr 2008, und ich habe das Gefühl, dass sie ein bisschen veraltet sind.
Wenn jemand damit helfen könnte, würde ich gerne das Problem lösen.
Ich bin auch ein Anfänger, also nehmen Sie diese Antwort mit einer Prise Salz - wenn es nicht funktioniert, gehen Sie weiter und Google mehr. Nicht vertraut mit AdapterView
, da ich traditionell eine ListView
oder GridView
und einen benutzerdefinierten Adapter von BaseAdapter
und dann listView.setAdapter(myCustomAdapter)
erweitert habe.
Sie könnten versuchen, so etwas in der Klasse WeatherAdapter
zu machen:
Dann in der Klasse, die WeatherAdapter
aufruft:
Auch Sie müssen es mehr in der getView Methode optimieren:
Ich glaube, diese Zeile ist schuld:
%Vor%Sie brauchen stattdessen:
%Vor% Der Wert false macht die aufgeblähte Ansicht unabhängig von der übergeordneten Klasse, die nicht an sie angehängt ist. Dies scheint sehr seltsam zu sein, da sie für benutzerdefinierte Ansichten innerhalb von AdapterView
s akzeptiert wird. Warum das so ist, finde ich absolut verwirrend, aber das obige Muster hat für mich funktioniert.
Für die Methode AdaptertView addView
:
void addView (Kind anzeigen)
Diese Methode wird nicht unterstützt und wirft ein Nicht unterstützteOperationException wenn aufgerufen. "(Aus der Android-Dokumentation)
Wahrscheinlich ruft die Aufblasprozedur die Methode addView
auf, und dies ist nicht möglich von AdapterView
oder AdapterView
.
Aus der Dokumentation:
"Ein Adapter-Objekt fungiert als Brücke zwischen einem AdapterView und der Basisdaten für diese Ansicht. Das Adapter bietet Zugriff auf die Daten Artikel. Der Adapter ist ebenfalls verantwortlich zum Erstellen einer Ansicht für jedes Element in der Datensatz ".
Ich denke, dass das Aufblasen von einer einfachen Aktivität aus möglich ist, die Ihre Ansicht und alle anderen Operationen modelliert, z. B. das Abrufen von Daten und das Anzeigen von Daten in anderen Klassen.
Ich hoffe, es wird hilfreich sein!
@ Axel22s Antwort ist der Schlüssel, aber es gibt ein paar andere Dinge, die in deinem Code fehlen. Zunächst sollten Sie je nach Vorliebe entweder BaseAdapter oder ArrayAdapter erweitern. Zweitens möchten Sie in der Praxis einen ViewHolder verwenden, um zu vermeiden, dass Sie übermäßig viele Aufrufe von ViewById aufrufen und (am wichtigsten) Ihre View recyceln.
%Vor% Ihre getView-Funktion kann Ansichten recyceln und die ViewHolder
-Klasse wie folgt verwenden:
}
Weitere Beispiele (und andere Optimierungstipps) finden Sie in diesem Blogpost (oder einfach nur google für ViewHolder).
Tags und Links android android-layout listview android-xml android-adapter