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 un TextView
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()
ou Thread.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:
- sans raison, vous créez un nouvel
TextView
objet t
!
- vous choisissez votre mise en page
TextView
dans la variable t
plus tard.
- vous définissez le texte de
t
(mais gardez à l'esprit: il ne sera affiché qu'après la onCreate()
fin et la boucle d'événement principal de votre application s'exécute!)
- vous attendez 10 secondes dans votre
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!)
- puis vous définissez un autre texte - celui-ci sera affiché dès que votre
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
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();
installez ce runnable en tant que gestionnaire, possible dans onCreate()
(mais lisez mes conseils ci-dessous):
// run the mUpdateUITimerTask's run() method in 10 seconds from now
mHandler.postDelayed(mUpdateUITimerTask, 10 * 1000);
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 votre Activity
sera créé pour la première fois! Android vous gardera probablement en Activity
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 dans onPause()
! Sinon, vous obtiendrez des "mises à jour" lorsque votre Activity
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étrer onResume()
, non onCreate()
!
.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.