Ich bin noch neu in der Android-Programmierung, so dass diese Frage eher einfach ist. Ich sehe viele Codebeispiele im Internet, auf denen UI-Komponenten wie TextView
initialisiert und in der Methode onCreate()
einer Aktivität aufgerufen werden.Android - Aktivität onCreate und Fragment onCreate
Wenn ich Android Studio ein neues Projekt erstellen - FirstApp
- mit den Standardeinstellungen, eine so genannte leere Aktivität MainActivity
damit activity_main
und fragment_main
mitbringen, kann ich sofort diese kompilieren in eine APK, stellen Sie es auf meinem Gerät und Ich bekomme einen Bildschirm mit einem Header "FirstApp" und einem TextView in der oberen linken Ecke "Hallo Welt!".
Wenn ich die TextView
eine ID von textview1
geben, und erstellen Sie eine Membervariable, TextView myTextView;
, dann kann ich es in der onCreate()
Methode der Aktivität verweisen, wie so (keine Compiler-Fehler, natürlich):
@Override
protected void onCreate (Bundle savedInstanceState)
{
super.onCreate (savedInstanceState);
setContentView (R.layout.activity_main);
myTextView = (TextView) findViewById (R.id.textview1);
myTextView.setText ("Hello tablet!");
if (savedInstanceState == null)
{
getSupportFragmentManager().beginTransaction().add (R.id.container,new PlaceholderFragment()).commit();
}
}
Wenn ich jedoch die APK kompilieren und ausführen, führt dies zu einem "Leider hat FirstApp gestoppt." Botschaft.
ich vorher, um dieses Problem bekommen habe von Startcode zu bewegen, die UI-Komponenten in die onStart()
Methode der Aktivität greift, etwa so:
@Override
protected void onStart()
{
super.onStart();
myTextView = (TextView) findViewById (R.id.textview1);
myTextView.setText ("Hello tablet!");
}
, die in einem Arbeits APK mit einem einzigen Textview in der Folge hätte oben links zeigt "Hallo Tablet!" - meine einfachen Fragen sind zweifach ...
- Wenn das Projekt Fragment verwendet dann soll ich erwarte, dass die UI-Komponenten können nicht in der
onCreate()
Methode der Aktivität zugegriffen werden können, wie ich sehe, geschah mit vielen Probe Code im Internet, wahrscheinlich weil sie noch nicht erstellt wurden? - Ist es akzeptabel für mich, Zugriff auf UI-Komponenten innerhalb der
onStart()
Methode der Aktivität (die funktioniert Arbeit) - oder sollte ich etwas anderes tun? Früher habe ich auch dieonCreateView
Methode des Fragments verwendet, aber ist der beste Ort, um UI-Komponenten innerhalb eines Fragments tatsächlich in deronCreate()
Methode des Fragments zuzugreifen, die ich noch nicht ausprobiert habe?
Ich stelle auch fest, dass die onCreate()
Methode des Standard-Fragment Android Studio für Sie erstellt, wenn Sie ein neues Projekt an einen Stub gemachten Angaben nicht ... aber onCreateView
der Fall ist, und die Lifecycle-Dokumentation impliziert (für mich, jedenfalls) dass dieser könnte der beste Ort sein, Dinge wie diese zu tun.
Alle Hinweise dazu sind willkommen.
Wenn es abgestürzt ist, holen Sie sich den Logcat StackTrace, damit wir sehen können, wo der Fehler liegt. Auch wird 'myTextView' irgendwo anders aufgebaut, zB' TextView myTextView; '? –
Sie sollten über Fragmente im Allgemeinen lesen. 1. Die Ansicht des Fragments ist noch nicht verfügbar (es ist keine einfache Ansicht, die Sie dem Layout hinzufügen). 2. Sie können auf die Ansichten von dem gewünschten Callback zugreifen ('onCreate()' wird im Allgemeinen bevorzugt). Das Problem besteht darin, dass Sie versuchen, auf die Ansicht des Fragments zuzugreifen, die Sie vermeiden sollten, und stattdessen das Fragment selbst behandeln lässt. – Luksprog
@Tom Hart - Ja, 'TextView myTextView;' ist als Membervariable enthalten. Bezieht sich Ihre Antwort darauf, dass Sie denken, dass diese UI-Komponente * in der Methode 'onCreate() 'der Aktivität selbst perfekt zugänglich sein sollte? – Hippogriff