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 :

Boites modales, ça fonctionne, mais pourquoi?


Sujet :

Android

  1. #1
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2012
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2012
    Messages : 164
    Points : 356
    Points
    356
    Par défaut Boites modales, ça fonctionne, mais pourquoi?
    Bon, on s'entend pour dire qu' à Rome, on fait comme les Romains.

    Mais bon, je suis tout nouveau dans le monde Java/Android avec un lourd passé de programmation sous Windows, alors forcément je traine avec moi des façons de faire qui ne sont peut-être pas acceptables sous Andoid.

    Ce que je voulais faire, c'est les deux boites de dialogues modales de base, l'équivalent d'un "ShowMessage" (la vie est belle, pressez Ok) et d'un ConfirmBox (Ceci va effacer cela, on y va ou on annule?). Et j'ai bien précisé avec un fonctionnement modal.

    Je fais un peu de recherche sur Internet et je tombe là-dessus:

    http://stackoverflow.com/questions/2...s-up-net-style

    Évidemment, je tombe sur le commentaire de Romain Guy. Pas de doute à mes yeux que le gars est plus que crédible (ingénieur/concepteur chez Google, c'est pas rien)

    Alors quand il dit que des popup modals, ça se fait pas sous Android, bin j'aurais tendance à suivre son conseil, surtout que c'est un Romain.

    Sauf que, dans l'intimité de mon foyer, j'ai écrit (en m'inspirant bien sûr des autres) dans un petit module deux petites classes "DialogMes" et "DialogConfirm". Elles fonctionnent très bien en mode modal et ne semblent pas mettre l'activité principale que les appelle dans tous ses états.

    Je dois aussi avouer que je ne vois pas nulle part dans le code quoi que ce soit qui ferait que les popup fonctionne en modal, ce qui est pourtant le cas.

    Ce que j'aimerais, c'est que vous me disiez ce qui est inacceptable dans mon code, si on veut respecter les façons de faire sous Android et pourquoi je devrais jeter ça à la poubelle:

    Le module de classes générales:

    TDialogs.java
    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
     
    package ca.clubgps.TestDialogs;
     
    import android.app.Activity;
    import android.app.AlertDialog;
    import android.content.DialogInterface;
    import android.os.Message;
     
     
    class DialogMes 
    {
     
      AlertDialog alertDialog ;
      private static final Message NO_HANDLER = null;
      public DialogMes(Activity parent,String aTitle, String mes)
      {
        alertDialog = new AlertDialog.Builder(parent).create();
        alertDialog.setTitle(aTitle);    
        alertDialog.setMessage(mes) ;  
        alertDialog.setButton("OK",NO_HANDLER) ;    
        alertDialog.show() ; 
      } 
    }
     
    interface DlgConfirmEvent
    {
      public void OnDlgConfirm(boolean yesPressed,int dlgID) ;
    }  
     
    class DialogConfirm
    {
      DlgConfirmEvent owner  ;
      AlertDialog alertDialog ;
     
      public DialogConfirm(DlgConfirmEvent parent,String aTitle, String mes, int id)
      {
        owner = parent ;
        final int ownerID = id ;
        alertDialog = new AlertDialog.Builder((Activity)parent).create();
        alertDialog.setTitle(aTitle);
     
        alertDialog.setMessage(mes) ;  
        alertDialog.setButton(DialogInterface.BUTTON_POSITIVE,"Ok",new DialogInterface.OnClickListener(){           
          public void onClick(DialogInterface dialog, int which) 
          {
            owner.OnDlgConfirm(true,ownerID) ;
          }});  
        alertDialog.setButton(DialogInterface.BUTTON_NEGATIVE,"Cancel",new DialogInterface.OnClickListener(){           
          public void onClick(DialogInterface dialog, int which) 
          {
            owner.OnDlgConfirm(false,ownerID) ;
          }});  
        alertDialog.show() ; 
      } 
    }
    L'activité principale (programme test):
    TestDialogsActivity.java
    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
     
    package ca.clubgps.TestDialogs;
     
     
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
     
     
    public class TestDialogsActivity extends Activity implements DlgConfirmEvent
    {
     
       @Override
      public void onCreate(Bundle savedInstanceState)
      {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
         // Test dialogue message
        Button btShowMessage = (Button) findViewById(R.id.btShowMessage);
        btShowMessage.setOnClickListener(new View.OnClickListener() {
          public void onClick(View view) 
          {
            DialogMes dlgMes = new DialogMes( TestDialogsActivity.this,"Message","life is good") ;                
          }  
        }); 
     
        // Test dialogue confirmation
        Button btConfirm= (Button) findViewById(R.id.btConfirm);
        btConfirm.setOnClickListener(new View.OnClickListener() {
          public void onClick(View view) 
          {
            DialogConfirm dlgMes = new DialogConfirm(TestDialogsActivity.this,"Confirmation","is it?",1) ;   
     
          }  
        });  
      }
     
     public void OnDlgConfirm(boolean yesPressed,int dlgID)
     {
       String mes ;
       if (yesPressed) 
         mes = "Ok pressed" ;
       else
         mes = "Cancel pressed" ;
       DialogMes dlgMes = new DialogMes( TestDialogsActivity.this,"RESULT",mes) ;
     
     }    
    }
    main.xml:
    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
     
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >
     
        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="@string/hello" />
       <Button
            android:id="@+id/btShowMessage"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="ShowMessage" />
        <Button
            android:id="@+id/btConfirm"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Confirm" />
    </LinearLayout>
    Un gros merci, j'apprécie d'avance l'aide que vous allez m'apporter pour éventuellement devenir l'un des vôtres!

  2. #2
    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
    Je crois que ce n'est pas la question sur stack-overflow...

    Le thread en question parle de faire quelque chose comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public void onClick(...)
    {
         Dialog dlg = new Dialog();
         int result = dlg.show(); 
         // <= ici on parle de modal, car on ne revient dans ce code *que* quand la boite de dialogue est fermée...
    }
    Si cette manière de programmer est parfaitement valide mais elle n'est absolument pas adaptée à Android, et même proscrite... le thread UI ne revenant jamais...
    Sous android on fait (comme le code donné en exemple ici):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public void onClick(...)
    {
         this.dlg = new Dialog();
         this.dlg.show();
    }
     
    public void onDialogResult(...)
    {
         ....
    }
    Voir même pour les dialogues un peu complexes (login...)
    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
     
    public void onClick(...)
    {
         Intent loginIntent = new Intent(...);
         startAcvitiyForResult(loginIntent,LOGIN_DIALOG);
    }
    public void onActivityResult(int id, Intent result)
    {
        if (id == LOGIN_DIALOG) {
            if (result is success) {
                ...
            } else {
                ...
        } else
            super.onActivityResult(id,result);
    }
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2012
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2012
    Messages : 164
    Points : 356
    Points
    356
    Par défaut
    Merci pour ta réponse, nicroman, t'as raison, j'avais mal compris la question du gars. La petite phrase qui a semé la confusion dans ma tête: "you don't want to do that" qui aurait pu être complètée par "this way".

    Pour ce que est des méthodes que tu proposes, c'est bien celles que j'utilise, me voilà rassuré, merci!

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

Discussions similaires

  1. [XL-2003] Le calendrier fonctionne mais je ne sais pas pourquoi !
    Par mikadoo57 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/01/2013, 23h44
  2. Mon code ne fonctionne pas mais pourquoi ?
    Par veriecherie dans le forum ASP
    Réponses: 3
    Dernier message: 01/08/2008, 12h19
  3. Cargo - Ca fonctionne mais je ne sais pas pourquoi.
    Par RémyYves dans le forum Maven
    Réponses: 1
    Dernier message: 07/02/2008, 13h13
  4. Ma jolie macro fonctionne mais je ne comprends pas pourquoi ^
    Par ouskel'n'or dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 01/07/2007, 06h06
  5. Réponses: 9
    Dernier message: 22/04/2006, 14h05

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