comment modifier le texte dans TextView Android
J'ai essayé de faire ce
@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 s'affiche quand je le lance. Je pense qu'il pourrait avoir quelque chose à voir avec la Thread.sleep()
méthode de blocage. Si quelqu'un peut me montrer comment mettre en œuvre une minuterie "asynchrone"?
Grâce.
- La raison pour laquelle il ne montre que la deuxième ligne est parce que
.setText()
remplace la totalité de la "widget" avec le texte que vous lui dites de jeu; y COMPRIS le texte que vous avez déjà mis là.
Vous devez vous connecter pour publier un commentaire.
Je viens de poster cette réponse dans l'android-discuter de google groupe
Si vous essayez juste pour ajouter du texte à la vue, de sorte qu'il affiche "la première Étape: explosion de l'œuf Étape Deux: faire frire des œufs" Alors envisager l'utilisation de
t.appendText("Step Two: fry egg");
au lieu det.setText("Step Two: fry egg");
Si vous voulez changer complètement de ce qui est dans le
TextView
de sorte qu'il est dit "la première Étape: explosion de l'œuf" au démarrage, et puis il dit "deuxième Étape: faire frire des œufs" à un moment plus tard, vous pouvez toujours utiliser unPraticable exemple sadboy a donné
Bonne chance
Votre
onCreate()
méthode a plusieurs énormes défauts:1)
onCreate
prépare votre Activité - donc, rien que vous ne sera rendu visible à l'utilisateur jusqu'à ce que cette méthode finitions! Par exemple, vous ne serez jamais en mesure de modifier unTextView
texte ici plus que UN temps que seule la dernière modification seront tirés au sort et donc visible pour l'utilisateur!2) Gardez à l'esprit qu'un Android programme, par défaut, exécutez dans UN fil! Donc: ne jamais utiliser de
Thread.sleep()
ouThread.wait()
dans votre thread principal qui est responsable de votre INTERFACE utilisateur! (lire "Garder la réactivité de votre Application" pour de plus amples informations!)Ce que votre initialisation de votre Activité n'est:
TextView
objett
!TextView
dans la variablet
plus tard.t
(mais gardez à l'esprit: il sera affiché uniquement aprèsonCreate()
de finitions et de la boucle principale de votre application s'exécute!)onCreate
méthode - ce ne doit jamais être fait que ça s'arrête tout de l'INTERFACE utilisateur de l'activité et sera certainement la force de l'ANR (l'Application ne Répond Pas, voir le lien ci-dessus!)onCreate()
méthode de finitions et de plusieurs autres L'activité du cycle de vie méthodes ont été traitées!La solution:
Texte qu'une seule fois dans
onCreate()
- ce doit être le premier texte qui doit être visible.Créer un
Runnable
et unHandler
installer ce praticable en tant que gestionnaire, possible dans
onCreate()
(mais lisez mes conseils ci-dessous):Conseils: assurez-vous de connaître une
Activity
's du cycle de vie! Si vous faites des choses comme ça dansonCreate()
cela ne sera possible que lorsque votreActivity
est créé le première temps! Android seront probablement maintenir votreActivity
en vie pendant une période de temps plus longue, même si elle n'est pas visible!Lorsqu'un utilisateur "commence" à nouveau - et il est toujours existant, vous ne verrez pas votre premier texte plus!
=> Toujours installer des gestionnaires dans
onResume()
et de les désactiver dansonPause()
! Autrement, vous obtiendrez des mises à jour lorsque votreActivity
n'est pas visible à tous!Dans votre cas, si vous voulez voir votre premier texte à nouveau quand il est ré-activé, vous devez le configurer dans
onResume()
, pasonCreate()
!La première ligne de texte nouveau point de vue est inutile
vous pouvez tout simplement faire ce
un thread d'arrière-plan qui dort ici est un exemple, mais je pense qu'il y a un timer qui serait mieux pour cela. voici un lien vers un bon exemple à l'aide d'une minuterie à la place
http://android-developers.blogspot.com/2007/11/stitch-in-time.html
@user264892
J'ai constaté que lors de l'utilisation d'une variable de Chaîne j'ai besoin soit de préfixe avec une Chaîne de "" ou explicitement exprimées à CharSequence.
Ainsi, au lieu de:
essayer:
ou:
ou, depuis votre chaîne n'est pas dynamique, encore mieux:
par vos conseils, je suis à l'aide de la poignée et runnables pour changer/changer le contenu de la TextView à l'aide d'un "timer". pour une raison quelconque, lors de l'exécution, l'application ignore la deuxième étape ("deuxième Étape: faire frire des œufs"), et afficher uniquement la dernière (troisième) de l'étape ("l'Étape trois: servir d'œuf").
🙂 Votre utilisation du fil dans un mauvais sens.
Il suffit de faire la suivante:
Que c'est.
paramètre le texte à sam textview deux fois, c'est overwritting le premier texte écrit.
Donc, la deuxième fois, lorsque nous utilisons settext nous venons d'ajouter de nouvelles chaînes comme
@Zordid @Iambda réponse est génial, mais j'ai trouvé que si je mets
dans la méthode run() et
dans la méthode onCreate de faire la chose à garder à jour.