Seu onCreate()
método tem várias falhas enormes:
1) onCreate
prepara sua atividade - então nada do que você fizer aqui ficará visível para o usuário até que este método seja concluído! Por exemplo - você nunca poderá alterar TextView
o texto de um aqui mais de UMA vez, pois apenas a última alteração será desenhada e, portanto, visível para o usuário!
2) Tenha em mente que um programa Android irá - por padrão - rodar em apenas UM thread! Portanto: nunca use Thread.sleep()
ou Thread.wait()
em seu thread principal que é responsável por sua IU! (leia "Mantenha seu aplicativo responsivo" para obter mais informações!)
O que a inicialização de sua atividade faz é:
- sem motivo, você cria um novo
TextView
objeto t
!
- você escolhe seu layout
TextView
na variável t
mais tarde.
- você define o texto de
t
(mas lembre-se: ele será exibido apenas após o término onCreate()
e o loop de evento principal do seu aplicativo for executado!)
- você espera por 10 segundos dentro do seu
onCreate
método - isso nunca deve ser feito , pois interrompe todas as atividades da IU e definitivamente forçará um ANR (Aplicativo não está respondendo, consulte o link acima)
- então você define outro texto - este será exibido assim que seu
onCreate()
método terminar e vários outros métodos de ciclo de vida de atividade tiverem sido processados!
A solução:
Defina o texto apenas uma vez onCreate()
- este deve ser o primeiro texto que deve estar visível.
Crie um Runnable
e umHandler
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();
instale este executável como um gerenciador, possível em onCreate()
(mas leia meu conselho abaixo):
// run the mUpdateUITimerTask's run() method in 10 seconds from now
mHandler.postDelayed(mUpdateUITimerTask, 10 * 1000);
Conselho: conheça bem Activity
o ciclo de vida de! Se você fizer coisas assim, onCreate()
isso só acontecerá quando o seu Activity
for criado pela primeira vez! O Android possivelmente o manterá Activity
vivo por um longo período de tempo, mesmo que não esteja visível! Quando um usuário "inicia" novamente - e ele ainda existe - você não verá mais o seu primeiro texto!
=> Sempre instale manipuladores onResume()
e desative-os onPause()
! Caso contrário, você receberá "atualizações" quando Activity
não estiver visível de forma alguma! No seu caso, se quiser ver o primeiro texto novamente quando for reativado, você deve configurá-lo onResume()
, não onCreate()
!
.setText()
substitui todo o "widget" pelo texto que você instruiu a definir; INCLUINDO texto que você já colocou lá.