Eu tentei fazer isso
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
t=new TextView(this);
t=(TextView)findViewById(R.id.TextView01);
t.setText("Step One: blast egg");
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
t.setText("Step Two: fry egg");
mas, por algum motivo, apenas o segundo texto aparece quando eu o executo. Acho que pode ter algo a ver com o Thread.sleep()
bloqueio do método. Alguém pode me mostrar como implementar um temporizador "de forma assíncrona"?
Obrigado.
.setText()
substitui todo o "widget" pelo texto que você instruiu a definir; INCLUINDO texto que você já colocou lá.Respostas:
Acabei de postar esta resposta no grupo android-discuss google
Se você está apenas tentando adicionar texto à exibição para que ela exiba "Etapa um: ovo queimado Etapa dois: ovo frito" Considere usar em
t.appendText("Step Two: fry egg");
vez det.setText("Step Two: fry egg");
Se você quiser mudar completamente o que está no
TextView
para que diga "Etapa um: ovo explodido" na inicialização e depois "Etapa dois: ovo frito", você sempre pode usar umExemplo executável de sadboy dado
Boa sorte
fonte
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á alterarTextView
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()
ouThread.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 é:
TextView
objetot
!TextView
na variávelt
mais tarde.t
(mas lembre-se: ele será exibido apenas após o términoonCreate()
e o loop de evento principal do seu aplicativo for executado!)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)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
instale este executável como um gerenciador, possível em
onCreate()
(mas leia meu conselho abaixo):Conselho: conheça bem
Activity
o ciclo de vida de! Se você fizer coisas assim,onCreate()
isso só acontecerá quando o seuActivity
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-osonPause()
! Caso contrário, você receberá "atualizações" quandoActivity
não estiver visível de forma alguma! No seu caso, se quiser ver o primeiro texto novamente quando for reativado, você deve configurá-loonResume()
, nãoonCreate()
!fonte
A primeira linha da nova janela de texto é desnecessária
você pode apenas fazer isso
quanto a um thread de fundo que dorme aqui é um exemplo, mas acho que há um cronômetro que seria melhor para isso. aqui está um link para um bom exemplo usando um cronômetro em vez http://android-developers.blogspot.com/2007/11/stitch-in-time.html
fonte
@ user264892
Descobri que, ao usar uma variável String, precisava prefixar com uma String "" ou converter explicitamente em CharSequence.
Então, em vez de:
experimentar:
ou:
ou, já que sua string não é dinâmica, melhor ainda:
fonte
de acordo com seu conselho, estou usando o identificador e executáveis para alternar / alterar o conteúdo do TextView usando um "cronômetro". por algum motivo, ao ser executado, o aplicativo sempre pula a segunda etapa ("Etapa dois: frite o ovo") e mostra apenas a última (terceira) etapa ("Etapa três: servir o ovo").
fonte
:) Você está usando o tópico de maneira errada. Basta fazer o seguinte:
É isso aí.
fonte
configurar o texto para sam textview duas vezes é sobrescrever o primeiro texto escrito. Então, na segunda vez, quando usamos settext, apenas acrescentamos a nova string como
fonte
@Zordid @Iambda a resposta é ótima, mas descobri que se colocasse
no método run () e
no método onCreate faz com que a coisa continue atualizando.
fonte