Aller au contenu

Modifier un layout après changement d'état d'un booleen


pommedure

Recommended Posts

Bonjour à tous, nouveau post, nouveau problème :)

Je m'explique :

Tout d'abord, j'affiche une vue sur un Layout.

Ensuite, je lance un Thread qui va gérer un chronomètre simultanément.

Une fois que le chronomètre est fini, je change d'état un booléen.

J'aimerais que dans la classe ou je lance le Layout, une fois que je récupère ce booléen grâce a une méthode, j'affiche une nouvelle "vue".

Seulement, Je ne sais pas s'il est possible de faire une sorte "d'écouteur" sur ce booléen :(

Si je ne suis pas assez clair, n'hésitez pas a me demander des précisions, merci d'avance ! ^_^

Lien vers le commentaire
Partager sur d’autres sites

Seulement, Je ne sais pas s'il est possible de faire une sorte "d'écouteur" sur ce booléen :(

Non, il faut que ce soit le thread qui modifie le booléen qui fasse ce qu’il faut (par exemple qui appelle une méthode de la classe où tu lances le layout).

Si tu veux modifier des éléments du layout, il faudra que tu utilises la fonction runOnUiThread(), parce qu’il n’y a que l’UI thread qui a le droit de faire ça, mais si tu veux juste démarrer une nouvelle activité, il me semble que tu peux faire startActivity() directement depuis le thread.

Lien vers le commentaire
Partager sur d’autres sites

D'accord, c'est bien ce que je voudrais faire, par exemple lancer un nouveau Layout.

Cependant, malgré ton explication, je n'arrive pas a utiliser les méthodes que tu m'a donné.

Voici le code de ma méthode run() que j'éxecute avec mon Thread :

public void run(){

mChronometer.start();

long sec = 20 + (int)(Math.random()*20);

while(TempsEcoule()<(sec*1000)){

if(TempsEcoule()<20000){

etape = 10;

}

if((TempsEcoule()>=20000) && (TempsEcoule() < (sec*1000)-10000 )){

etape = 20;

}

if((TempsEcoule()>=20000) && (TempsEcoule() < (sec*1000)-5000 )){

etape = 30;

}

}

//ici je voudrais lancer un nouveau Layout

fin = true;

}

Serais-tu capable de me dire ce que je dois mettre a l'endroit du lancement de mon layout ? :emo_im_undecided:

merci

Lien vers le commentaire
Partager sur d’autres sites

Tout d’abord on ne lance pas un nouveau layout, on lance une nouvelle activité, donc il faut que tu crées une deuxième activité correspondant à ton deuxième layout.

Ensuite, depuis ton timer tu fais

Intent secondActivity = new Intent(FirstActivity.this, SecondActivity.class);
startActivity(secondActivity);

La fonction startActivity() prend en argument un Intent, qui est créé par new Intent(), qui prend lui-même deux arguments : le deuxième est la classe de l’activité que tu souhaites lancer, et le premier est un contexte.

Ici j’ai supposé que ton thread est une classe intérieure à ta première activité (pour que FirstActivity.this ait un sens). Si ce n’est pas le cas, il faut que le thread récupère la première activité autrement.

Par ailleurs, la façon dont tu attends est très mauvaise, parce que tu vas utiliser tout le CPU alors qu’il ne se passe rien. Je te conseille très vivement d’utiliser sleep() à la place.

Lien vers le commentaire
Partager sur d’autres sites

Désolé pour l'erreur de syntaxe, c'est bien une activity que je souhaite lancer.

Pour le Thread, merci du conseil. Je viens seulement de commencer a les étudier, donc ne sachant pas trop comment faire, j'avais crée une méthode a coté.

Maintenant, tout fonctionne, il ne reste plus qu'a optimiser tout ça :)

Merci pour tes réponses !

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...