J'ai essayé de faire ça
@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");
mais pour une raison quelconque, seul le deuxième texte apparaît lorsque je l'exécute. Je pense que cela pourrait avoir quelque chose à voir avec le Thread.sleep()
blocage de méthode. Alors quelqu'un peut-il me montrer comment implémenter une minuterie de manière "asynchrone"?
Merci.
.setText()
remplace le "widget" entier par le texte que vous lui demandez de définir; Y COMPRIS le texte que vous y avez déjà mis.Réponses:
Je viens de publier cette réponse dans le groupe google android-discussion
Si vous essayez simplement d'ajouter du texte à la vue afin qu'elle affiche "Étape 1: faire sauter l'œuf Étape 2: faire frire l'œuf" Alors envisagez d'utiliser
t.appendText("Step Two: fry egg");
au lieu det.setText("Step Two: fry egg");
Si vous voulez changer complètement ce qui est dans le
TextView
pour qu'il dise «Étape un: blast egg» au démarrage, puis il dit «Étape deux: faire frire l'œuf» à un moment plus tard, vous pouvez toujours utiliser unExemple exécutable donné par Sadboy
Bonne chance
la source
Votre
onCreate()
méthode présente plusieurs défauts énormes:1)
onCreate
prépare votre activité - donc rien de ce que vous faites ici ne sera rendu visible à l'utilisateur tant que cette méthode ne sera pas terminée! Par exemple - vous ne serez jamais en mesure de modifier unTextView
ici plus que le texte » ONE temps que seul le dernier changement sera établi et donc visible pour l'utilisateur!2) Gardez à l'esprit qu'un programme Android ne fonctionnera - par défaut - que dans UN thread! Ainsi: n'utilisez jamais
Thread.sleep()
ouThread.wait()
dans votre thread principal qui est responsable de votre UI! (lisez «Gardez votre application réactive» pour plus d'informations!)Ce que fait votre initialisation de votre activité est:
TextView
objett
!TextView
dans la variablet
plus tard.t
(mais gardez à l'esprit: il ne sera affiché qu'après laonCreate()
fin et la boucle d'événement principal de votre application s'exécute!)onCreate
méthode - cela ne doit jamais être fait car cela arrête toute activité de l'interface utilisateur et forcera définitivement un ANR (Application Not Responding, voir le lien ci-dessus!)onCreate()
méthode se terminera et que plusieurs autres méthodes de cycle de vie d'activité auront été traitées!La solution:
Ne définissez le texte qu'une seule fois
onCreate()
- ce doit être le premier texte à être visible.Créer un
Runnable
et unHandler
installez ce runnable en tant que gestionnaire, possible dans
onCreate()
(mais lisez mes conseils ci-dessous):Conseil: assurez-vous de connaître
Activity
le cycle de vie d' un an ! Si vous faites des choses comme ça,onCreate()
cela n'arrivera que lorsque votreActivity
sera créé pour la première fois! Android vous gardera probablement enActivity
vie plus longtemps, même s'il n'est pas visible! Lorsqu'un utilisateur le «redémarre» - et il existe toujours - vous ne verrez plus votre premier texte!=> Toujours installer les gestionnaires
onResume()
et les désactiver dansonPause()
! Sinon, vous obtiendrez des "mises à jour" lorsque votreActivity
n'est pas du tout visible! Dans votre cas, si vous souhaitez revoir votre premier texte lorsqu'il est réactivé, vous devez le paramétreronResume()
, nononCreate()
!la source
La première ligne de la nouvelle vue textuelle est inutile
tu peux juste faire ça
dans la mesure où un fil d'arrière-plan qui dort ici est un exemple, mais je pense qu'il y a une minuterie qui serait mieux pour cela. voici un lien vers un bon exemple utilisant une minuterie à la place http://android-developers.blogspot.com/2007/11/stitch-in-time.html
la source
@ user264892
J'ai trouvé que lors de l'utilisation d'une variable String, j'avais besoin de préfixer avec une chaîne de "" ou de cast explicitement en CharSequence.
Donc au lieu de:
essayer:
ou:
ou, puisque votre chaîne n'est pas dynamique, encore mieux:
la source
selon vos conseils, j'utilise handle et runnables pour changer / changer le contenu du TextView en utilisant un "timer". pour une raison quelconque, lors de l'exécution, l'application ignore toujours la deuxième étape ("Étape deux: faire frire l'œuf") et n'affiche que la dernière (troisième) étape ("Étape trois: servir l'œuf").
la source
:) Vous utilisez le fil de manière incorrecte. Faites ce qui suit:
C'est tout.
la source
définir deux fois le texte sur sam textview remplace le premier texte écrit. Donc, la deuxième fois que nous utilisons settext, nous ajoutons simplement la nouvelle chaîne comme
la source
La réponse @Zordid @Iambda est excellente, mais j'ai trouvé que si je mets
dans la méthode run () et
dans la méthode onCreate, faites en sorte que la chose se mette à jour.
la source