Ich bin neu in Java und Android-Programmierung. Soweit ich weiß, findViewById
wurde auf Elternklassen definiert und ich bin nur neugierig, warum findViewById
Methode ohne super
Schlüsselwort in der Unterklasse aufrufen kann.Warum findViewByID kann ohne Super-Schlüsselwort
Antwort
Ohne Überschreiben der findViewById
-Methode in der untergeordneten Klasse sind super
und this
im Rahmen der Aktivitätsklasse gleichwertig.
Sie können this.findViewById()
tun, oder ActivityName.this.findViewById()
aber das ist überflüssig, wenn nicht innerhalb einer anonymen Klasse (dh, wenn Sie ActivityName.this
verwenden sollte, aber das ist nicht in den Anwendungsbereich der Frage)
Verwandte Frage: Warum doesn‘ t setContentView
brauchen ein super
?
>> Aber die Ansicht, die Sie versuchen zu finden, ist in dieser Klasse, nicht die Super-Klasse, und die Elternklasse Implementierung funktioniert gut, so dass keine echte Notwendigkeit, IMO ... Ich denke, diese Zeile ist nicht verwandt, –
und 'this' und' super' sind nicht äquivalent, 'this' bezieht sich normalerweise auf den aktuellen Kontext. Wenn Sie also in einer anonymen Klasse sind (wie View.OnClickListener), bedeutet' this' den 'OnClickListener' nicht die 'Aktivität' –
@MoshErsan Messepunkte. Zur Klarstellung bearbeitet –
super
Schlüsselwort bezieht sich auf SuperClass
(Parent-Klasse) Implementierung, so dass, wenn Sie rufen Sie super.findViewById(...)
SuperClass
Methode Implementierung zugreifen, und da Ihr SubClass
diese Methode nicht außer Kraft setzen; super.findViewById(...)
und findViewById(...)
sind gleichwertig.
Aber wenn Sie es überschreiben, wird es einen Unterschied machen. hier ein Beispiel:
class MyActivity extends Activity{
void onCreate(....){
View fromParentView = super.findViewById(...);
View fromThisView = findViewById(...);
}
View findViewById(int resId){
throw new IllegalArgumentException();
}
}
diese erste fromParentView
ordnungsgemäß funktionieren, aber die fromThisView
eine Ausnahme
überprüfen Sie bitte https://docs.oracle.com/javase/tutorial/java/IandI/super.html
- 1. Fehler: kann Symbol Methode findviewbyid
- 2. Kann findViewById und onCreate Methoden
- 3. Warum werfen Sie (EditText) findViewById auf (EditText)?
- 4. findViewById nicht
- 5. findViewById null Rückkehr nach
- 6. Kann nicht auf "findViewById" in AsyncTask zugreifen
- 7. findViewById kann die Methode nicht lösen
- 8. findviewbyid Fehler kann nicht aufgelöst werden
- 9. Fehler: kann keine Symbolmethode finden findViewById (int)
- 10. kann nicht findViewById() in CustomListView mit Fragmenten
- 11. Nullzeiger Ausnahme - findViewById()
- 12. FindViewById in Fragmente
- 13. findViewById in Fragment
- 14. Kann mir jemand die Magie hinter findViewById (1) oder findViewById (2) erklären?
- 15. Android: Referenzen zu findViewById
- 16. Wie funktioniert findviewbyid
- 17. FindViewById auf Xamarin Forms?
- 18. FindViewbyID mit Fragmenten
- 19. findViewById innerhalb einer statischen Methode
- 20. Symbolleiste - findViewbyID gibt null zurück
- 21. Mit 'findViewById()' nach 'setContentView()'
- 22. Android findViewById in DialogFragment
- 23. Unerwartete ClassCastException mit findViewById
- 24. NoSuchFieldError on findViewById()
- 25. vs findViewById aufblasen
- 26. Android findviewbyid in DatePickerDialog
- 27. findViewById (R.id.list_view); Rückgabe "Null"
- 28. findViewById in DialogFragment - NullPointerException
- 29. Effizienz von findViewById
- 30. Wie make findViewByID global
In welchen Fällen denken Sie, ein 'super' Referenz hilft werfen? –
Sie müssen nur super verwenden, wenn Sie die Implementierung in der übergeordneten Klasse aufrufen möchten, wenn Sie die Implementierung in der aktuellen Klasse überschrieben haben. Wenn Sie keine Überschreibung haben, sind 'super.findViewById()' und 'findViewById()' äquivalent. – javanut13