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 :

Attendre validation TimePickerDialog pour continuer


Sujet :

Android

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2011
    Messages : 216
    Points : 139
    Points
    139
    Par défaut Attendre validation TimePickerDialog pour continuer
    bonjour,

    j'ai créé une fonction pour afficher un TimePickerDialog, lorsque j’appelle cette fonction je voudrais attendre la validation du TimePickerDialog avant de continuer.

    voici mon code:

    ma fonction d'affichage du TimePickerDialog:

    Code java : 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
    public static void choix_heure(Context context, final alarme  al)
    	{		
    		TimePickerDialog.OnTimeSetListener debut=
    				new TimePickerDialog.OnTimeSetListener() {
    				public void onTimeSet(TimePicker view, int hourOfDay,
    				int minute) {
    						al.setTime(hourOfDay, minute);
    				}
    				};
     
    		TimePickerDialog tpd_debut = new TimePickerDialog(context,2, debut,
    				al.date.get(Calendar.HOUR_OF_DAY),
    				al.date.get(Calendar.MINUTE),
    				true);
     
    		tpd_debut.show();		
    	}

    et l' appel a ma fonction:

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if(v.equals(findViewById(R.id.btn_choix_heure_debut)))
    		{
    			ModeleOutils.choix_heure(this, alarme_debut);
    			actualise(alarme_debut,aff_heure_debut);
    		}

    mon TimePickerDialog s'affiche bien, mais ma fonction actualise() s' exécute avant que le TimePickerDialog ait été validé.

    comment faire pour attendre le clic sur le bouton ok du TimePickerDialog ?

    Merci.

  2. #2
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Déroule ton code comme le compilateur le ferait.

    Pour quelle raison choix_heure serait bloquant et ferait une attente pour la suite ?
    Remarque : faire ainsi serait d'ailleurs conceptuellement faux, et une catastrophe dans la pratique, résultant dans un freeze de l'UI.

    Il faut simplement que tu invoques ta méthode actualise dans le listener de ton TimePickerDialog.

    En regardant tes extraits de code, il me semble que ton listener n'est jamais attribué au Dialog, il ne sera donc pas fonctionnel.
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2011
    Messages : 216
    Points : 139
    Points
    139
    Par défaut
    bonjour,

    je savais que le "problème" venait du fait que mon code ne bloquait pas et qu'a aucun moment je lui disait d'actualiser après avoir choisi l'heure.

    j'ai donc modifier ma fonction pour tester :

    Code java : 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
    public static void choix_heure(final Context context, final alarme  al, final View v)
    	{	
    		TimePickerDialog.OnTimeSetListener debut=
    				new TimePickerDialog.OnTimeSetListener() {
    				public void onTimeSet(TimePicker view, int hourOfDay,
    				int minute) {
    						al.setTime(hourOfDay, minute);
    						MainActivity.actualise(al, v);
    				}
    				};
     
    		TimePickerDialog tpd_debut = new TimePickerDialog(context,2, debut,
    				al.date.get(Calendar.HOUR_OF_DAY),
    				al.date.get(Calendar.MINUTE),
    				true);
     
    		tpd_debut.show();		
    	}

    là ça marche bien et l'actualisation se fait après le choix de l'heure (normal puisque l'actualisation se fait lorsque j'ai cliqué sur le bouton "ok" de mon TimePickerDialog).

    mais le problème que j'avais c'est que la classe qui lance cette fonction n'est pas toujours la MainActivity, je ne peux donc pas laisser mon code ainsi.

    est il possible de lui passer la classe "appelante" ? toutes les classe qui feront appel a cette fonction auront une fonction actualise().

    Citation Envoyé par Hizin
    En regardant tes extraits de code, il me semble que ton listener n'est jamais attribué au Dialog, il ne sera donc pas fonctionnel.
    si je ne me trompe pas, il s'agit du troisième argument de mon TimePickerDialog.
    Merci.

  4. #4
    Expert éminent

    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
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    On utilise pour cela le principe du "listener"....

    Soit une interface... avec une fonction "actualise" déclarée.
    Implémentée par les activités qui en auront besoin....
    Et passée à la fonction "choix_heure" (attention l'utilisation du signe '_' est proscrit en java.... la fonction devrait s'appeler "choixHeure").
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  5. #5
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2011
    Messages : 216
    Points : 139
    Points
    139
    Par défaut
    bonjour,

    j'ai fait des recherche sur les listener, j'ai trouvé des tutos ici et .

    ça n'a pas été facile (mon anglais est un peut limite) mais j'ai réussit a créer un listener sur mon objet.

    et j'ai qu'une chose a dire: c'est trop bien !!!

    voici mon code:

    dans ma classe objet:

    Code java : 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
    	ArrayList<timeUpdateListener> listeners = new ArrayList<timeUpdateListener> (); // liste des listeners
     
    	public void settimeUpdateListener (timeUpdateListener listener) 
            {
               this.listeners.add(listener); // ajoute le listener a la liste
            }
    	public void setTime(int hourOfDay, int minutes) //sert a modifier l'heure
    	{
    	    this.date = Calendar.getInstance();
    	    Date now = this.date.getTime();
    	    this.date.set(Calendar.HOUR_OF_DAY,hourOfDay);
    	    this.date.set(Calendar.MINUTE,minutes);
    	    this.date.set(Calendar.SECOND, 0);
    	    this.date.set(Calendar.MILLISECOND,0);
    	    if (this.date.getTime().before(now)) // on s'assure que la date est *au moins* le lendemain
    	    	this.date.add(Calendar.DATE,1);
     
    	    sendTimeToListener(hourOfDay, minutes);
    	}
     
    	private void sendTimeToListener(int hourOfDay, int minutes) 
            {
    		for (timeUpdateListener listener : listeners) 
    			listener.timeUpdate(hourOfDay, minutes); // on fait passer le message a tous les listeners.	
    	}
     
    	public interface timeUpdateListener 
            {
                void timeUpdate(int heure, int minutes); // methode a redefinir dans le listener
            }

    dans la classe qui souhaite être avertie du changement:

    Code java : 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
    import com.bibi.chuut.alarme.timeUpdateListener;
            @Override
    	protected void onCreate(Bundle savedInstanceState) {
     
    		super.onCreate(savedInstanceState);
                    [...]
    		alarme_debut.settimeUpdateListener(new timeUpdateListener() {
     
    			@Override
    			public void timeUpdate(int heure, int minutes) {
    				actualise(alarme_debut, aff_heure_debut);
     
    			}
    		});
     
    	public void actualise(alarme al, View v) { // permet d'actualiser l'affichage du l'heure
     
    		String minute;
     
    		if(al.date.get(Calendar.MINUTE)<10)
    			minute = "0" + al.date.get(Calendar.MINUTE);
    		else
    			minute = "" + al.date.get(Calendar.MINUTE);
     
    		((TextView) v).setText(al.date.get(Calendar.HOUR_OF_DAY)+" : "+minute);
     
    	}

    ce serait cool de faire un tuto en français là-dessus mais je sais pas comment on fait ni si j'ai utilisé la bonne manière de faire.

    il me reste cependant une petite questions:

    quand je crée dans le listener mon settimeUpdateListener(new ....) il me et automatiquement la méthode timeUpdate avec le override et tout et tout, mais il ne me met pas le ';' après la ')'. je n'ai pas trouvé comment faire.

    Merci

  6. #6
    Expert éminent

    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
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Pas besoin dans ton cas d'aller jusqu'à la liste de listeners.... J'aurai d'ailleurs du parler de callback plutot

    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
     
    public static void choix_heure(final Context context, final alarme  al, final ITimePickedListener listener)
    {	
    	TimePickerDialog.OnTimeSetListener debut=
    		new TimePickerDialog.OnTimeSetListener() {
    			public void onTimeSet(TimePicker view, int hourOfDay,int minute) {
    				al.setTime(hourOfDay, minute);
    				listener.actualise(al);
    			}
    		};
     
    	TimePickerDialog tpd_debut = new TimePickerDialog(context,2, debut,
    				al.date.get(Calendar.HOUR_OF_DAY),
    				al.date.get(Calendar.MINUTE),
    				true);
     
    		tpd_debut.show();		
    	}
    et bien sur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public interface ITimePickedListener 
    {
          public void actualise(final Alarm al);
    }
    Dans les activités:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public class MainActivity extends .... implements ITimePickedListener
    {
        ...
     
     
        public void actualise(final Alarm al)
        {
             ... le code qui recoit l'alarme
        }
    }
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  7. #7
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2011
    Messages : 216
    Points : 139
    Points
    139
    Par défaut
    bonjour,

    si je comprend bien ce code, il fonctionne pour un seul listener ? il n' y
    a pas plusieurs listener sur l'heure de la même alarme, puisque je lui passe le listener a qui envoyer l'info. c'est ça ?

    Merci Hizin et nicroman pour votre aide.

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

Discussions similaires

  1. Attendre une touche pour continuer sur VBA
    Par Theo_david dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 03/02/2009, 17h15
  2. Réponses: 3
    Dernier message: 12/07/2007, 03h40
  3. attendre un evenement pour continuer une boucle
    Par dederfred dans le forum Flash
    Réponses: 2
    Dernier message: 20/01/2007, 21h01
  4. Attendre un évènement pour continuer l'exécution
    Par vinzzzz dans le forum Interfaces Graphiques en Java
    Réponses: 7
    Dernier message: 22/11/2006, 22h42
  5. [VB6] attendre un événement pour continuer l'exécution
    Par Argonz dans le forum VB 6 et antérieur
    Réponses: 21
    Dernier message: 12/11/2002, 14h08

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