2017-03-01 1 views
0

Mein Hintergrund ist Java, Swing, JavaFX, deshalb bin ich in Android verwirrt. Warum jede Komponente (Button, ListView, EditText) oder ein anderes Widget benötigt wird, um activity's Instanzen zu übergeben.Warum Android benötigt, um die Instanz der Aktivität im Konstruktor eines Widgets zu übergeben

LinearLayout layout = (LinearLayout) findViewById(R.id.linear_layout_tags); 
Button btnTag = new Button(this); // why need to pass this/activity here? 
layout.addView(row); // this is the layout in which we are placing button 
        // then why we need to pass activity's instance as parameter? 

Antwort

0

Eigentlich brauchen sie nicht ein Activity aber ein Context (Activity eine Klasse von ihm abgeleitet ist, so ist es ein guter Kandidat zu View s Konstrukteurs übergeben werden). Context in Android ist so etwas wie ein Objekt Gott, durch die man auf Ressourcen zugreifen können, Anwendungszustand, Ressourcen des Geräts usw.

Alle Klassen, die Sie erwähnt sind Söhne von View und seinem Konstruktor erfordert auch eine Context (dann die Konstruktoren der abgeleiteten Klassen). Die doc sagt, diesen Parameter: Kontext: Der Kontext der Blick in ausgeführt wird, durch die sie die aktuellen Thema, Ressourcen zugreifen können usw.

+0

Jedes Beispiel bitte? Was meinst du mit Zugriffsressourcen? Wie und wann? und wir übergeben Instanz nicht Kontext der Aktivität. Der Kontext ist das übergeordnete Element der Aktivität? –

+0

'Context.getResources(). GetColor (android.R.color.white, null);' nur um auf die weiße Farbe – Massimo

+0

zuzugreifen Ich denke, es gibt nichts im Zusammenhang mit 'widget' –

0

Ein Kontext ermöglicht den Zugriff auf Informationen über den Anwendungszustand. Es bietet Zugriff auf Aktivitäten, Fragmente und Dienste für Ressourcendateien, Bilder, Designs/Stile und externe Verzeichnisspeicherorte. Es ermöglicht außerdem den Zugriff auf die integrierten Dienste von Android, beispielsweise für Layout-Inflation, Tastatur und das Auffinden von Content-Providern.

In vielen Fällen, wenn der "Kontext erforderlich" ist, müssen wir einfach die Instanz der aktuellen Aktivität übergeben. In Situationen, in denen wir uns in Objekten befinden, die von der Aktivität erstellt wurden, z. B. Adapter oder Fragmente, müssen wir die Aktivitätsinstanz in diese Objekte einfügen. In Situationen, in denen wir außerhalb einer Aktivität sind (in einer Anwendung oder einem Dienst), können wir stattdessen den Kontext "Anwendung" verwenden.

für weitere Informationen werfen Sie einen Blick auf diese owesome tutorial.

wie für Ihre Frage der Button und TextView und jedes andere Widget in Android erweitern Ansicht und Ansicht benötigt den Kontext, um einige Werte von Ressourcen wie das Standardthema zu erhalten. schau dir View source code an und suche nach mContext.

Verwandte Themen