2013-08-08 13 views
8

Cercando di iniziare con lo sviluppo di Android, e di fare un lavoro di base con TextViews ..TextView.setText (Android) sta causando arresti anomali. Qualche idea sul perché?

Per qualche motivo il metodo di TextView setText() sta causando enormi problemi per me .. Ecco una versione semplificata del mio codice per mostrare quello che ho significa:

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"); 
    } 
} 

Ciò causerà un crash, e non capisco perchè .. se creo il TextView all'interno del onCreate funziona bene, ma se creo al di fuori di esso, non è così .. perché? Ha la riga "TextView text;" non è stato ancora eseguito o qualcosa del genere?

Grazie!

risposta

9

È necessario chiamare setContentView() prima di inizializzare il TextView in modo che la vostra attività ha accesso a tutti i componenti di layout.

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

text.setText("literally anything"); 
3

interruttore queste 2 righe

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

è necessario impostare il contenuto prima

2

Da docs:

onCreate (Bundle) è dove si inizializza la vostra attività. La maggior parte è importante, in genere si chiama setContentView (int) con una risorsa di layout che definisce l'interfaccia utente e utilizzando findViewById (int) su recuperare i widget nell'interfaccia utente che è necessario interagire con a livello di programmazione.

Quindi questo significa che se si vuole fare riferimento le vostre opinioni nel layout, è necessario innanzitutto impostare la visualizzazione di contenuti e già allora chiamare il metodo findViewById per fare riferimento a una vista figlio della risorsa di layout che definisce della vostra attività UI

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

Se "letteralmente qualsiasi cosa" è una variabile, che spesso può essere il caso, assicurarsi che non stia lanciando una NullPointerException. Ho continuato ad avere questo problema da solo. Ho fissato che sia:

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

Le eccezioni possono essere veramente utile, quindi se sei un programmatore che inizia, io suggerisco di mettere la gestione delle eccezioni sulla vostra lista di cose da imparare al più presto.

Problemi correlati