IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

SetChecked() ToggleButton android ne marche pas


Sujet :

Android

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2011
    Messages : 37
    Points : 29
    Points
    29
    Par défaut SetChecked() ToggleButton android ne marche pas
    Bonjour,

    J'utilise un toggleButton et je veux controler le changement du status du bouton suivant un certain nombre de critères.

    Quand ces critères sont remplis , je fais un setchecked(true) sur le bouton, et je peux afficher dans le log la valeur button.ischecked(), la valeur est bien mis à jour.

    Le problème est que l'état visuel du bouton ne change pas. Je ne sais pas comment faire pour qu'il y ait un rafraîchissement du bouton. Une sorte de repaint(). Des idées?

    Merci

  2. #2
    Membre régulier Avatar de Rappunzell
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Novembre 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Novembre 2007
    Messages : 93
    Points : 91
    Points
    91
    Par défaut
    Salut,

    Y'a pas de raison, setChecked(true) change l'aspect graphique du ToggleButton.

    Il doit y avoir un problème dans ton code. Tu pourrais nous le montrer ?

  3. #3
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    9 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9 604
    Points : 18 520
    Points
    18 520
    Par défaut
    Tu dois checked le mauvais button ^^

    T'es sûre de l'id ?
    Keith Flint 1969 - 2019

  4. #4
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2011
    Messages : 37
    Points : 29
    Points
    29
    Par défaut
    J'ai dans mon layout le code correspondant au bouton

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <ToggleButton
            android:id="@+id/entree5"
            android:layout_width="120dp"
            android:layout_height="30dp"
            android:layout_below="@id/surfaceView"
            android:layout_toRightOf="@id/entree"
            android:layout_marginLeft="50dp"
            />
    Dans mon activité (AffichageActivity.java) je récupère ainsi le toggleButton

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    entree5 = (ToggleButton) findViewById(R.id.entree5);
    où entree5 est une propriété de la classe activité
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    private ToggleButton entree5;
    .
    Dans la méthode onCreate(Bundle savedInstanceState) de AffichageActivity.java, j'éxecute une instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mc.updateLeds(); mc est une autre propriété de AffichageActivity  déclarée ainsi private ModuleCommands mc;
    La méthode de mise à jour du toggle button se trouve dans la classe ModuleCommands.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
        public void updateLeds() {
     
            Timer tim = new Timer();       
     
     
            tim.schedule(new TimerTask() {
     
                @Override
                public void run() {
                    if (isConnected()) {
                        try {
                           initLeds();
     
                        } catch (Exception e) {
                        }
     
                    }
                }
            }, 0, 1000);// mise à jour du bouton toutes les secondes
     
       }
     
     public  void initLeds() {
     
     
     
     
            if (condition  ) {    
            	/*mise à jour du toggle bouton*/ 
            	affichage.getEntree5().setChecked(true);
                    /*verification de la nouvelle valeur*/
            	Log.i("", "entree 5 activée valeur checked = " + affichage.getEntree5().isChecked() );
     
            } else {
            	/*mise à jour du toggle bouton*/
            	affichage.getEntree5().setChecked(false);
    /*verification de la nouvelle valeur*/
            	Log.i("", "entree 5 desactivée valeur checked = " + affichage.getEntree5().isChecked() );
            }
     
         }
    Je rappelle que lors de la verification de la nouvelle valeur j'ai bien la bonne valeur, donc la mise à jour du status se passe bien mais pas l'affichage.

  5. #5
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2011
    Messages : 37
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par thierrybenji Voir le message
    Tu dois checked le mauvais button ^^

    T'es sûre de l'id ?
    Oui j'ai bien verifié il s'agit du bon id

  6. #6
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2011
    Messages : 37
    Points : 29
    Points
    29
    Par défaut
    Autre chose, lorsque la condition est remplie au démarrage de l'activité, le bouton est bien "highlighted" est sinon il ne l'est pas. Mais pour les mises à jour ultérieures, aucun feedback visuel . Pourtant toutes les secondes , il y a execution de l'instruction setchecked et j'ai l'affichage de la nouvelle valeur ischecked() du bouton sur le logger

  7. #7
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2011
    Messages : 37
    Points : 29
    Points
    29
    Par défaut
    thierry et Rappunzell, je vais l'illustrer sur un exemple simple où le but est de changer l'état du toggleButton toutes les secondes, et là non plus ça ne marche pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    package com.toggle.test;
     
    import java.util.Timer;
    import java.util.TimerTask;
     
    import android.app.Activity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.ToggleButton;
     
    public class TestToggleButtonActivity extends Activity implements OnClickListener {
     
     
    	private ToggleButton test;
    	 private boolean started = false;
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            test = (ToggleButton) findViewById(R.id.testButton);
           test.setOnClickListener(this); 
     
        }
    public  void initLeds() {
        	if (test.isChecked())
        	{ 
        		test.setChecked(false);
        		Log.i("", "state chenged, new state = " + test.isChecked());
     
        	}else
        	{
     
        		test.setChecked(true);
        		Log.i("", "state chenged, new state = " + test.isChecked());
     
        	}
     
     
        }
     
        public void updateLeds() {
     
            Timer tim = new Timer();       
     
     
            tim.schedule(new TimerTask() {
     
     
     
    			@Override
                public void run() {
                   if(started)
                        try {
                           initLeds();
     
                        } catch (Exception e) {
                        }
     
     
                }
            }, 0, 1000);
     
     
     
     
        }
    	@Override
    	public void onClick(View v) {
    		started = true;
    		updateLeds();
     
    	}
    }

  8. #8
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    9 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9 604
    Points : 18 520
    Points
    18 520
    Par défaut
    C'est peut être du au fait que tu sois dans une sorte de Thread ou quelque chose comme ça.

    Essaie ça quand tu modifies l'affichage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    		runOnUiThread(new Runnable(){
    			public void run() {
     
    			}
    		});
    Ton logcat ne t’indique rien ?
    Keith Flint 1969 - 2019

  9. #9
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2011
    Messages : 37
    Points : 29
    Points
    29
    Par défaut
    Merci de ton avis
    Citation Envoyé par thierrybenji Voir le message
    C'est peut être du au fait que tu sois dans une sorte de Thread ou quelque chose comme ça.

    Essaie ça quand tu modifies l'affichage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    		runOnUiThread(new Runnable(){
    			public void run() {
     
    			}
    		});
    Ton logcat ne t’indique rien ?
    Je ne sais pas comment utiliser runOnUiThread, en gros ma méthode updateLeds serait comme ça?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        public void updateLeds() {
     
        	 TestToggleButtonActivity.this.runOnUiThread(new Runnable() {
                 public void run() {
                    initLeds();
                 }
             });
     
        }

  10. #10
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    9 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9 604
    Points : 18 520
    Points
    18 520
    Par défaut
    Oui je pense que si le problème vient du fait que tu n'es pas dans le bon thread ça pourrait être ça.
    Mais je ne sais pas ce n'est qu'un test...

    Normalement si tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    test.setChecked(false);
    test.setChecked(true);
    Et que l'affiche ne change pas, il doit y avoir quelque chose dans le logcat.

    Ou sinon tu peux faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    try{
         for(int i=0; i<5; i++){
              test.setChecked(false);
              Thread.currentThread().sleep(1000);
              test.setChecked(true);
              Thread.currentThread().sleep(1000);
         }
    }catch(InterruptedException ie){
         ie.printStackTrace();
    }
    Au lieu de passer par un Timer, bon ça ne sert à rien et ça bloque toute l'Activity, mais si tu veux voir un truc se cocher et se décocher...
    Keith Flint 1969 - 2019

  11. #11
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2011
    Messages : 37
    Points : 29
    Points
    29
    Par défaut
    Merci beaucoup j'avais un problème de rafraichissement de mon logcat, et tu as raison , j'ai le message d'erreur suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     Only the original thread that created a view hierarchy can touch its views.
    .

    Au moins je sais d'où viens le problème je vais creuser la dessus en esperant que j'y arrive avant demain matin.

  12. #12
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    9 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9 604
    Points : 18 520
    Points
    18 520
    Par défaut
    Ouais ben c'est ça.
    Avec runOnUiThread tu n'auras plus cette erreur.
    Keith Flint 1969 - 2019

  13. #13
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2011
    Messages : 37
    Points : 29
    Points
    29
    Par défaut
    Merci je m'en suis sorti finalement avec un "Handler" le si ça peut aider quelqu'un d'autre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    Dans le thread:
     
    Message msg = new Message();
            String textTochange = "text"
            msg.obj = textTochange;
            mHandler.sendMessage(msg);
     
    //et dans l'activité 
     
    Handler mHandler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
    String text = (String)msg.obj;
     
    //setcheck....
    }

  14. #14
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    9 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9 604
    Points : 18 520
    Points
    18 520
    Par défaut
    Ah ouais c'est vrai, j'ai pas l'habitude, j'utilise que des AsyncTask du coup je fais des publishProgress().
    Keith Flint 1969 - 2019

  15. #15
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2011
    Messages : 37
    Points : 29
    Points
    29
    Par défaut
    ça m'interesse aussi les asyncTask mais pour un autre problème. Je me connecte à une url pour récupérer des ressources et en attendant la connexion je veux afficher une progressBar. Mais il ya un écran noir qui s'affiche. L'affichage de ma progressbar est bloquée en meme temps que l'activité tans que la connexion n'est pas réalisée. Tu as une idée de comment je pourrais m'en sortir?

  16. #16
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    9 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9 604
    Points : 18 520
    Points
    18 520
    Par défaut
    Créer une AsynTask, avec un onProgressUpdate comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    @Override
    protected void onProgressUpdate(Integer... params){
         super.onProgressUpdate(params);
     
         switch(params[0]){
              case 0 :
                   mProgressDialog = ProgressDialog.show(........);	
                   break;
              case 1 :
                   mProgressDialog.dismiss();
                   break;
         }
    }
    Avant d'essayer de te connecter tu fais publishProgress(0), une fois que t'es connecté tu fais publishProgress(1).

    Tu te connecte dans le doInBackground().

    Ou si je me rappel bien tu peux aussi utiliser onPreExecute et onPostExecute puisqu'ils s’exécutent dans le thread de l'ui aussi.
    Donc dans onPreExecute tu affiche ton progressDialog et dans onPostExecute tu le dismiss.
    Keith Flint 1969 - 2019

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Android Delphi XE5 ne marche pas
    Par rdr2510 dans le forum Composants FMX
    Réponses: 26
    Dernier message: 30/04/2014, 09h03
  2. 'SHOW TABLES' marche pas sous postgresql !?
    Par fet dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 13/05/2004, 09h28
  3. Réponses: 9
    Dernier message: 07/05/2003, 12h57
  4. [GifDecoder] marche pas dans applet avec IE
    Par formentor dans le forum Applets
    Réponses: 2
    Dernier message: 06/05/2003, 10h43
  5. Sysdate qui marche pas ??
    Par StouffR dans le forum Langage SQL
    Réponses: 4
    Dernier message: 28/08/2002, 13h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo