2015-06-14 9 views
5

Ich bin ein Anfänger in Android und ich möchte wissen, warum ist es, dass, wenn ich meine setContentView platzieren() nach Definition der Textview, meine App abstürzt, dhWo setze setContentView() in onCreate()?

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    TextView tv=(TextView) findViewById(R.id.tv); 
    Linkify.addLinks(tv, Linkify.WEB_URLS|Linkify.EMAIL_ADDRESSES| 
      Linkify.PHONE_NUMBERS); 
    setContentView(R.layout.activity_main);  //After TextView 
} 

Aber als ich Setzen Sie meine setContentView() vor der Definition der TextView dann meine App läuft gut.

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); //Before TextView 
    TextView tv=(TextView) findViewById(R.id.tv); 
    Linkify.addLinks(tv, Linkify.WEB_URLS|Linkify.EMAIL_ADDRESSES| 
      Linkify.PHONE_NUMBERS); 
} 

Warum ist es, dass & und wie das Hinzufügen setContentView() vor macht den Unterschied?

Antwort

8

setContentView() legt buchstäblich die Ansichten Ihrer Aktivität fest. Wenn Sie versuchen, etwas wie TextView tv=(TextView) findViewById(R.id.tv); zu tun, dann gibt es keine Ansicht, die Sie finden können, weil Sie Ihre Ansichten noch nicht festgelegt haben und somit Ihre App abstürzt. Aus diesem Grund sollten Sie setContentView() eingeben, bevor Sie versuchen, auf Ihre Ansichten zuzugreifen.

+0

Ich fragte mich, ob Sie mir bei dieser Frage http://goo.gl/d5opg5 helfen könnten. Es ist keine dieser "fix-this-for-me" -Fragen, das verspreche ich. – Axel

0

Sie können beliebigen Code vor der setContentView()-Methode ausführen, solange er sich nicht auf (Teile von) View bezieht, der noch nicht festgelegt ist.

Da Ihre TV-Variable sich auf den Inhalt der Ansicht bezieht, kann sie nicht ausgeführt werden.

0

Wenn Sie nach dem Deklarieren von TextView setContentView() definieren, führen Sie einen Fehler aus, da die Objekt-ID, die Sie in TextView initialisieren, in diesem Layout unbekannt ist, bis seConteView() ausgeführt wird.

Verwandte Themen