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 :

Problème mise à jour UI


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    377
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2009
    Messages : 377
    Par défaut Problème mise à jour UI
    Bonjour,

    j'éprouve quelques problèmes pour la mise à jour de mes vues sur Android.

    Je réalise un petit quiz, lorsque l'on clique sur la bonne réponse je change la couleur en vert.

    En cas de mauvaise réponse je veux colorier en rouge la réponse sélectionné et en vert la bonne réponse.

    Cependant seul le bouton rouge se met à jour. Je rentre pourtant bien dans la condition.

    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
     
    ...
    	private Button m_sol1, m_sol2, m_sol3;
    ...
     
    private View.OnClickListener buttonListener = new View.OnClickListener() 
        {
    		@Override
    		public void onClick(View v) 
    		{
    			Button b = (Button) v;
    			// Correct response.
    			if (m_currentQuestion.getCorrect().equals(b.getText()))
    			{
    				b.getBackground().setColorFilter(0xff00ff00, PorterDuff.Mode.MULTIPLY);
     
                                // Lock button during the wait.
    				lock(true);
                                // Wait for new question.
    				Handler handler = new Handler(); 
    			    handler.postDelayed(new Runnable() { 
    			         public void run() { 
    			              newQuestion(); 
    			         } 
    			    }, 500); 	
    			}
     
    			// Bad response.
    			else
    			{			
    				b.getBackground().setColorFilter(0xFFFF0000, PorterDuff.Mode.MULTIPLY);
     
    				// Lock usage of bouton.
    				lock(true);
     
    				// Colorise the good response.
    	       		if (m_currentQuestion.getCorrect().equals(m_sol1.getText()))
    	    		{
    	    			m_sol1.getBackground().setColorFilter(0xff00ff00, PorterDuff.Mode.MULTIPLY);
    	    		}
    	    		else if (m_currentQuestion.getCorrect().equals(m_sol2.getText()))
    	    		{
    	    			m_sol2.getBackground().setColorFilter(0xff00ff00, PorterDuff.Mode.MULTIPLY);
    	    		}
    	    		else
    	    		{
    	    			m_sol3.getBackground().setColorFilter(0xff00ff00, PorterDuff.Mode.MULTIPLY);
    	    		}
    			// wait 1 sec before lauch newQuestion.
    			    Handler handler = new Handler(); 
    			    handler.postDelayed(new Runnable() { 
    			         public void run() {
    			        	 newQuestion(); 
    			         } 
    			    }, 1000); 
    			}
    		}
    	};
    Je ne comprends pas d’où vient l'erreur ?

    Merci de votre aide.

    p.s. j'arrive à une solution si je met tout mon code dans newquestion(); mais j'aimerai bien pouvoir le mettre dans le onClick().

  2. #2
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    C'est quoi "lock(true)" ?

    Sinon, il faut peut etre faire un "invalidate" sur le bouton modifié... je ne suis pas sur que le background sache notifier le bouton qu'un redraw est nécessaire (mais je peux me tromper).

    Sur le bouton cliqué, il n'y a pas de probleme, puisqu'Android va faire un invalidate apres le onClick....

  3. #3
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    377
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2009
    Messages : 377
    Par défaut
    Ça marche avec le invalidate(); c'était exactement ça.

    Sinon j'ai fait la méthode lock(); afin de bloquer les boutons pendant le wait. C'est plus agréable pour l'utilisateur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public void lock(boolean _state)
    	{
    	m_lock = _state;
    	m_sol1.setClickable(!_state);
    	m_sol2.setClickable(!_state);
    	m_sol3.setClickable(!_state);
    }

    Merci beaucoup

  4. #4
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    377
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2009
    Messages : 377
    Par défaut
    Je rencontre de nouveau un problème avec ce cas, ça fonctionne très bien avec les boutons de bases, mais pas avec des boutons personnalisé. J'ai remarqué déjà que je suis obligé d'ajouter un invalidate après le onclick, car il ne se fait plus...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        <Button
            android:id="@+id/sol2"
            android:layout_width="fill_parent"
            android:layout_height="80dp"
            android:background="@drawable/button_standard_v1"
            android:layout_marginTop="15dp"
        />
    Et le code de l'activity :

    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
    else
    {	
    	b.getBackground().setColorFilter(0xFFFF0000, PorterDuff.Mode.MULTIPLY);
    	b.invalidate();
    	// Lock usage of bouton.
    lock(true);
     
    // Check the right question.
    if (m_currentQuestion.getCorrect().equals(m_sol1.getText()))
    {
    	m_sol1.getBackground().setColorFilter(0xff00ff00, PorterDuff.Mode.MULTIPLY);
    	m_sol1.invalidate();
    }
    else if (m_currentQuestion.getCorrect().equals(m_sol2.getText()))
    {
    	m_sol2.getBackground().setColorFilter(0xff00ff00, PorterDuff.Mode.MULTIPLY);
    	m_sol2.invalidate();
    }
    else
    {
    	m_sol3.getBackground().setColorFilter(0xff00ff00, PorterDuff.Mode.MULTIPLY);
    	m_sol3.invalidate();
    }
    Ce que je ne comprend pas c'est que seul la dernière couleur est appliqué, mais pas uniquement à un bouton, mais à plusieurs boutons selon se schéma.

    Si j'attends :
    [bouton 1] vert
    [bouton 2]
    [bouton 3] rouge

    -> ça affiche

    [bouton 1] vert
    [bouton 2] vert
    [bouton 3] vert

    2ème cas si j'attends :

    [bouton 1]
    [bouton 2] vert
    [bouton 3] rouge

    -> ça affiche

    [bouton 1]
    [bouton 2] vert
    [bouton 3] vert

    Pourquoi le fait d'utiliser une image personnalisé sur mon bouton modifie le comportement du programme.

    Quelqu'un aurait-il une solution ?

    Merci

    [EDIT]

    J'ai trouvé d'où vient l'erreur mais aucune idée de comment la réparer proprement.

    En fait ma modification ne se fait plus sur l'image, mais sur la ressource (@drawable/button_standard)...

    Est-ce qu'il existe une autre solution que de créer 3 copies de l'image ?

    [/EDIT]

  5. #5
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    mutate() ?

  6. #6
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    377
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2009
    Messages : 377
    Par défaut
    Merci encore une fois.

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

Discussions similaires

  1. Problème Mise à Jour de Table
    Par pignouflolo dans le forum Access
    Réponses: 8
    Dernier message: 21/07/2006, 15h34
  2. Réponses: 6
    Dernier message: 29/05/2006, 14h22
  3. Problème mise à jour onglet
    Par auriolbeach dans le forum Access
    Réponses: 1
    Dernier message: 25/12/2005, 13h10
  4. Problème mise à jour vers IE6 sous W2K
    Par lio33 dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 11/10/2005, 11h51
  5. [HTML] Problème mise à jour des fichiers en cache
    Par El Riiico dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 05/09/2005, 17h00

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