Die anderen Elemente werden erfolgreich gefunden, aber foo kommt null zurück. MyCustomView hat einen Konstruktor MyCustomView(Context c, AttributeSet a) und ein Log.d(...) am Ende dieses Konstruktors erscheint erfolgreich in logcat kurz vor dem “epic fail”.
Warum ist foo Null?
Denn im Konstruktor hatte ich super(context) anstatt super(context, attrs).
Es ist sinnvoll, wenn Sie die Attribute wie die ID nicht übergeben, dann hat die Ansicht keine ID und kann daher nicht mit dieser ID gefunden werden. 🙂
Auch sollten Sie Zeilen nicht mögen (MyCustomView) foo = findViewById(R.id.foo); Sein MyCustomView foo = (MyCustomView) findViewById(R.id.foo);?
– Jeremy Logan
7. November 09 um 12:23 Uhr
Hatte das gleiche Problem, in meinem Fall hatte ich das setContentView() vergessen.. XD
Wenn Sie mehr als einen Konstruktor haben, müssen Sie außerdem alle Ihre super()-Methoden auf die richtige Weise aktualisieren.
– Gabriel Esteban
8. Mai 13 um 14:33 Uhr
Ich bekam einen Herzinfarkt, als ich sah, wie das gute ‘ol findViewById() null zurückgab … Sie haben meine Zeit gespart! Danke!
– GiveEmTheBoot
10. März 14 um 20:45 Uhr
Alexander Koroltschuk
Ich hatte das gleiche Problem, weil ich in meiner benutzerdefinierten Ansicht den Konstruktor überschrieben habe, aber den Superkonstruktor ohne aufgerufen habe attrs Parameter. (Das war ein Copy/Paste-Fehler.)
Meine vorherige Konstruktorversion:
public TabsAndFilterRelativeLayout(Context context, AttributeSet attrs) {
super(context);
}
Jetzt habe ich:
public TabsAndFilterRelativeLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
Und das funktioniert!
Ich hatte das gleiche Problem. Mein Fehler war folgender: Ich habe geschrieben
und da ich einen Inflater verwendet habe, um die Ansicht aus einer XML-Datei zu “laden”, war die letzte Zeile falsch. Um es zu lösen, musste ich schreiben:
Ich habe meine Lösung geschrieben, falls jemand das gleiche Problem hat.
Scheint verschiedene Gründe zu haben. Ich habe gerade “Clean …” in Eclipse verwendet, um ein ähnliches Problem zu lösen. (FindViewByID hatte zuvor funktioniert und fing aus irgendeinem Grund an, null zurückzugeben.)
Gleiches Problem, aber andere Lösung: Ich habe nicht angerufen
setContentView(R.layout.main)
BEVOR ich versucht habe, die Ansicht wie angegeben zu finden Hier
Ich denke, dies ist die Lösung, wenn Sie ein Element in einer anderen Ansicht anstelle der aktuellen verwandten Ansicht erhalten.
– StarCub
3. April 12 um 5:40 Uhr
MQ
Wenn Sie mehrere Layoutversionen haben (je nach Bildschirmdichte, SDK-Versionen), stellen Sie sicher, dass alle das gesuchte Element enthalten.
Ich denke, dies ist die Lösung, wenn Sie ein Element in einer anderen Ansicht anstelle der aktuellen verwandten Ansicht erhalten.
– StarCub
3. April 12 um 5:40 Uhr
gerfmarquez
In meinem Fall gab findViewById null zurück, weil meine benutzerdefinierte Ansicht im Haupt-XML ungefähr so aussah: