LayoutFlater kann nicht im benutzerdefinierten Adapter verwendet werden

7

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.

    
Teknogrebo 29.11.2010, 17:29
quelle

4 Antworten

6

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:

%Vor%

Dann in der Klasse, die WeatherAdapter aufruft:

%Vor%

Auch Sie müssen es mehr in der getView Methode optimieren:

Ссылка

    
albnok 19.01.2011, 03:49
quelle
16

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.

    
Clint 21.06.2011 02:01
quelle
3

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!

    
bifulcoluigi 28.05.2011 13:17
quelle
1

@ 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:

%Vor%

}

Weitere Beispiele (und andere Optimierungstipps) finden Sie in diesem Blogpost (oder einfach nur google für ViewHolder).

    
mrmcduff 18.09.2013 16:02
quelle