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 :

passage de paramètres entre "fenetres" deja existantes


Sujet :

Android

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2005
    Messages : 109
    Points : 88
    Points
    88
    Par défaut passage de paramètres entre "fenetres" deja existantes
    Bonjour,

    Je dispose dans mon appli d'une Activity/View principale (que j'appelerai A ici) qui donne sur une seconde (un explorateur de fichier crée a la main que j'appelerai B)

    En gros le shéma de mon appli est un truc du genre
    A->nouvel intent(B)->selection d'un fichier, lecture du contenu->retour du contenu du fichier dans l'EditText de ma Activity/View A
    Je suis complètement bloqué a la dernière étape a savoir passer le contenu du fichier que j'ai préalablement récupéré pour le mettre dans un EditText de ma premiere Activity/View.

    En parcourant les topics du forum ainsi que certaines réponses notamment de nicroman, j'ai pu voir que souvent il était expliqué le concept de vérifier que la première Activity/View est toujours "vivante" et non pas détruite pour besoin de mémoire par le systême.
    Je ne comprend cependant pas dans mon programme comment faire cette partie du code qui vérifie l'existence de mon activity principale "A" puis qui envoi le paramètre (un String) au composant EditText de cette dernière.

    Pourriez-vous m'éclairer sur ce point ou me linker un tutoriel qui fait un traitement similaire afin que je puisse comprendre le principe et le transcrire selon mon besoin.

    Merci d'avance.
    Mon blog technique: www.codeyourweb.org
    HTML5 / CSS3 / JS – Intégration des technologies du web a destination des nouvelles plateformes et nouveaux usages d'internet

  2. #2
    Membre extrêmement actif
    Profil pro
    Développeur
    Inscrit en
    Mars 2012
    Messages
    1 969
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 969
    Points : 3 375
    Points
    3 375
    Par défaut
    Au lieu de lancer un intent, pourquoi ne lances-tu pas une Dialog (alertDialog)?

    De cette manière, tu restes dans ton activité, tu es certain qu'elle existe et tu peux accéder aux champs de ton activité.

    Effectivement, si tu utilises cette même fonctionnalité inter-activités, ce que j'ai mis plus haut n'est pas bon car l'idée n'est pas de copier/coller du code.
    Si la réponse vous a aidé, pensez à cliquer sur +1

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2005
    Messages : 109
    Points : 88
    Points
    88
    Par défaut
    En fait l'appli en question est un editeur de texte sur tablette dans le meme genre qu'un bloc notes mais avec diverses fonctionalités (coloration syntaxique de code, numéro de ligne, possibilité d'envoyer le document ou de le partager etc...)

    la seconde activity est un gestionnaire de fichier qui permet soit de sauvegarder le document en cours soit d'en ouvrir un depuis un emplacement du systeme de fichiers avec la liste des dossiers, les emplacements les plus communs (Downloads/Music/Pictures...)

    Ici je préfère donc passer par une vue complète en plein écran plutot qu'une boite de dialogue car cette vue est assez complète et je veux qu'elle prenne tout l'espace surl'écran de la tablette.

    J'espère que ces précisions vous aideront a comprendre pourquoi ce choix particulier.

    Merci d'avance pour vos réponses.
    Mon blog technique: www.codeyourweb.org
    HTML5 / CSS3 / JS – Intégration des technologies du web a destination des nouvelles plateformes et nouveaux usages d'internet

  4. #4
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    Si je comprends bien tu veux pouvoir récupérer des données de l'activity B vers A , dans ce cas tu dois utiliser le onActivityForResult et lancer ton activity B avec un StartActivityForResult.

    Activiy A
    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
     
     
    //lors de ton appel
    Intent intent = new Intent(this, ClassB.class);
    startActivityForResult(intent, 0);
     
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data)
       {
     
          // j'ai pris 0 pour l'exemple mais créer une constante !
          if (RESULT_OK == resultCode && requestCode == 0)
          {
              // tu auras dans data les donnée donner par B
              data.getExtras...
          }
        }



    Activity B
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Intent intent =  new Intent();
    intent.putExtra("SOMETHING", "EXTRAS");
    this.setResult(RESULT_OK, intent);
    finish();

    j'ai pu voir que souvent il était expliqué le concept de vérifier que la première Activity/View est toujours "vivante" et non pas détruite pour besoin de mémoire par le systême.
    , logiquement si ton activity parente a été supprimé par ton Os c'est que l'utilisateur était dans la merde ....

    Voici la vie des process :
    Background process
    A process holding an activity that's not currently visible to the user (the activity's onStop() method has been called). These processes have no direct impact on the user experience, and the system can kill them at any time to reclaim memory for a foreground, visible, or service process. Usually there are many background processes running, so they are kept in an LRU (least recently used) list to ensure that the process with the activity that was most recently seen by the user is the last to be killed. If an activity implements its lifecycle methods correctly, and saves its current state, killing its process will not have a visible effect on the user experience, because when the user navigates back to the activity, the activity restores all of its visible state. See the Activities document for information about saving and restoring state.
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2005
    Messages : 109
    Points : 88
    Points
    88
    Par défaut
    Merci de ton aide, cela devrai pouvoir fonctionner, néanmoins juste deux petites précisions:

    - ma première activity envoi elle aussi des paramètres a la seconde lors de son ouverture pour le moment de la manière suivante, puis-je toujours les envoyer comme ceci avec startActivityForResult() ou non?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    	Intent intent = new Intent(MainActivity.this, FileBrowserActivity.class);
    		intent.putExtra("type", type);
    		intent.putExtra("textSaved", saved);
    		startActivity(intent);
    - la methode startActivityForResult semble prendre 3 paramètres, le premier est l'Intent que j'ai crée mais que dois-je mettre dans les deux autres paramètres?

    Merci d'avance.
    Mon blog technique: www.codeyourweb.org
    HTML5 / CSS3 / JS – Intégration des technologies du web a destination des nouvelles plateformes et nouveaux usages d'internet

  6. #6
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    ma première activity envoi elle aussi des paramètres a la seconde lors de son ouverture pour le moment de la manière suivante, puis-je toujours les envoyer comme ceci avec startActivityForResult() ou non?
    oui change juste l'appel de la fonction le passage de paramètre reste le même.

    la methode startActivityForResult semble prendre 3 paramètres
    http://developer.android.com/referen...t.Intent, int)

    intent The intent to start.
    requestCode If >= 0, this code will be returned in onActivityResult() when the activity exits.
    options Additional options for how the Activity should be started. See Context.startActivity(Intent, Bundle) for more details.
    L'options est facultatif, prends celle avec deux paramètre en entrée.

    Pour le requestCode c'est justement lui qui te permettre de connaître qui dans onActivityForResult te retourne les données.
    Il faut donc créer une constante par Activity appelé pour savoir quelle Activity a été 'back' depuis la fonction onActivityForResult de l'appelante.
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2005
    Messages : 109
    Points : 88
    Points
    88
    Par défaut
    Merci c'est quasiment bon, le seul problème qu'il me reste est que je fais ouvrir un AlertDialog pour demander a l'utilisateur s'il veut vraiment ouvrir le fichier en question (avec un oui ou non), et que du coup le this.setResult semble inapproprié.
    J'ai bien essayé avec le nom de mon Activity (en faisant FileBrowserActivity.setResult() )mais ca ne fonctionne plus non plus

    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
     
     
    	// ouverture d'un fichier
    	DialogInterface.OnClickListener openClickListener = new DialogInterface.OnClickListener(){
    		@Override
    		public void onClick(DialogInterface dialog, int which){
    			switch(which){
    				case DialogInterface.BUTTON_POSITIVE:
    					String buffer = readData(currentFile);
    				 	Intent intent =  new Intent();
    					intent.putExtra("text", buffer);
    					this.setResult(RESULT_OK, intent);
    					finish();
    				break;
     
    				case DialogInterface.BUTTON_NEGATIVE:
    					// do nothing
    				break;
    			}
    		}
    	};
    Mon blog technique: www.codeyourweb.org
    HTML5 / CSS3 / JS – Intégration des technologies du web a destination des nouvelles plateformes et nouveaux usages d'internet

  8. #8
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2005
    Messages : 109
    Points : 88
    Points
    88
    Par défaut
    autant pour moi, en enlevant juste le "this" ca fonctionne tout aussi bien

    Merci encore
    Mon blog technique: www.codeyourweb.org
    HTML5 / CSS3 / JS – Intégration des technologies du web a destination des nouvelles plateformes et nouveaux usages d'internet

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

Discussions similaires

  1. WM18 : Problème de passage de paramètre entre les fenetres
    Par barribar dans le forum Windev Mobile
    Réponses: 2
    Dernier message: 22/05/2015, 09h08
  2. [jsp][servlet]passage de paramètre entre deux frames
    Par alexandra_ape dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 29/06/2004, 11h14
  3. [Forms]Passage de paramètre entre Forms et Reports
    Par jack554 dans le forum Reports
    Réponses: 4
    Dernier message: 30/03/2004, 13h58

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