Il tuo metodo onCreate()
ha diversi difetti enormi:
1) onCreate
prepara vostra attività - quindi nulla che si fa qui sarà resa visibile per l'utente fino a quando questo metodo finiture! Ad esempio, non sarà mai possibile modificare un testo di TextView
qui oltre allo UNO, poiché verrà disegnata solo l'ultima modifica e quindi visibile all'utente.
2) Tenere presente che un programma Android verrà eseguito automaticamente per impostazione predefinita nel thread ONE! Quindi: non utilizzare mai Thread.sleep()
o Thread.wait()
nella discussione principale che è responsabile per l'interfaccia utente! (leggi "Keep your App Responsive" per ulteriori informazioni!)
Che cosa il vostro di inizializzazione della vostra attività fa è:
- per nessun motivo si crea un nuovo oggetto
TextView
t
!
- scegli il
TextView
del tuo layout nella variabile t
in seguito.
- si imposta il testo del
t
(ma tenere a mente: sarà visualizzato solo dopoonCreate()
finiture e il ciclo degli eventi principale della vostra applicazione viene eseguita!)
- di attendere 10 secondi all'interno del vostro metodo di
onCreate
- questo non deve mai essere eseguito in quanto interrompe tutta l'attività dell'interfaccia utente e forzerà definitivamente un ANR (Applicazione non risponde, vedere il link sopra!)
- quindi si imposta un altro testo - questo verrà visualizzato non appena il metodo
onCreate()
finiture e molti altri metodi Activity lifecycle sono stati it elaborato!
La soluzione:
Set testo solo una volta in onCreate()
- questo deve essere il primo testo che dovrebbe essere visibile.
Creare un Runnable
e un Handler
private final Runnable mUpdateUITimerTask = new Runnable() {
public void run() {
// do whatever you want to change here, like:
t.setText("Second text to display!");
}
};
private final Handler mHandler = new Handler();
installare questo eseguibile come un gestore, possibile in onCreate()
(ma leggere il mio consiglio di seguito):
// run the mUpdateUITimerTask's run() method in 10 seconds from now
mHandler.postDelayed(mUpdateUITimerTask, 10 * 1000);
Consigli: essere sicuro di conoscere il ciclo di vita di Activity
! Se fai cose del genere in onCreate()
, ciò avverrà solo quando il tuo Activity
viene creato il primo tempo ! Android manterrà il tuo Activity
attivo per un periodo di tempo più lungo, anche se non è visibile! Quando un utente "lo avvia" di nuovo - ed è ancora esistente - non vedrai più il tuo primo testo!
=> Installare sempre i gestori in onResume()
e disabilitare in onPause()
! Altrimenti riceverai "aggiornamenti" quando il tuo Activity
non è affatto visibile! Nel tuo caso, se vuoi vedere di nuovo il tuo primo testo quando è riattivato, devi impostarlo su onResume()
, non su onCreate()
!
La ragione per cui mostra solo la seconda riga è perché '.setText()' sostituisce l'intero "widget" con il testo che gli dici di impostare; INCLUSO il testo che hai già inserito. – georgiaboy82