2013-08-08 12 views
8

Próbuje zacząć z rozwojem Androida, i robi pewne podstawowe prace z TextView ..TextView.setText (Android) powoduje awarie. Jaki jest pomysł?

Z jakiegoś powodu metoda TextView za setText() jest przyczyną ogromnych problemów dla mnie .. tutaj jest uproszczoną wersją mojego kodu, aby pokazać, co ja myśli:

package com.example.testapp; 

import android.os.Bundle; 
import android.app.Activity; 
import android.widget.TextView; 

public class MainActivity extends Activity { 

    TextView text; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     text = (TextView) findViewById(R.id.text1); 
     setContentView(R.layout.activity_main); 
     text.setText("literally anything"); 
    } 
} 

to spowoduje awarię, a ja nie rozumiem dlaczego .. gdybym stworzyć TextView w onCreate to działa dobrze, ale gdybym go utworzyć poza tym, to nie robi .. dlaczego? Czy wiersz "Tekst TextView;" jeszcze nie wykonano egzekucji czy coś takiego?

Dzięki!

Odpowiedz

9

treść trzeba zadzwonić setContentView() przed inicjowania TextView tak, że aktywny ma dostęp do wszystkich elementów układu.

setContentView(R.layout.activity_main); 
text = (TextView) findViewById(R.id.text1); 

text.setText("literally anything"); 
3

przełącznik te 2 linie

text = (TextView) findViewById(R.id.text1); 
    setContentView(R.layout.activity_main); 

trzeba ustawić pierwszy

2

Od docs:

onCreate (Bundle) to gdzie można zainicjować swoją aktywność. Najczęściej ważne jest to, że zazwyczaj wywołujesz setContentView (int) z zasobem układu definiującym twój interfejs użytkownika, a za pomocą findViewById (int) do pobierasz widżety w tym interfejsie, które chcesz programowo interweniować z .

Więc to oznacza, że ​​jeśli będzie odwołać swoje poglądy w układzie, należy najpierw ustawić widok zawartości i już wtedy wywołać metodę findViewById odwołać widoki podrzędne zasobu układu definiowania swoją aktywność UI

1
text = (TextView) findViewById(R.id.text1); 
setContentView(R.layout.activity_main); 
text.setText("literally anything"); 

Jeśli "dosłownie wszystko" jest zmienną, co często może mieć miejsce, upewnij się, że nie rzuca ona wyjątku NullPointerException. Sam miałem ten problem. Naprawiłem to być:

text = (TextView) findViewById(R.id.text1); 
    setContentView(R.layout.activity_main); 
    try { 
     text.setText("literally anything"); 
    } catch (NullPointerException e) { 
     // Do something 
    } 

Wyjątki mogą być bardzo przydatne, więc jeśli jesteś rozpoczynające programista, proponuję umieścić obsługi wyjątku na liście rzeczy, aby dowiedzieć się szybko.

Powiązane problemy