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 d'une variable de l'enfant au parent


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    artisan
    Inscrit en
    Octobre 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : artisan
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2013
    Messages : 47
    Par défaut Passage d'une variable de l'enfant au parent
    Bonsoir,

    j'ai décidément un soucis pour arriver à mon but.

    N'ayant pas trouvé de solutions à mon niveau pour récupérer le path d'un fichier à partir d'une application cliente :
    http://www.developpez.net/forums/d13...e/#post7532417
    J'ai donc mis en place un explorateur de fichier:

    Le Parent lance l'explorateur de fichier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.selectfile);
    	 Bundle extras = getIntent().getExtras();
    	 if (extras != null){
    	 String Variable = extras.getString("nom");
    	 textView1 = (TextView)findViewById(R.id.textView1);
    	 textView1.setText(Variable);
    	 }
         selection=(Button)findViewById(R.id.selection);
         selection.setOnClickListener(new OnClickListener () {
       public void onClick (View view) {
    	 Intent intent=new Intent(SelectFile.this,ExplorateurActivity.class);
    	 startActivity(intent);
    L'enfant sélectionne le fichier et je voudrais récupérer le path du fichier avec la variable fichier dans le parent:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public void onItemClick(AdapterView<?> adapter, View view,
    						int position, long id) {
    					File fichier = mAdapter.getItem(position);
    					Intent t = new Intent(ExplorateurActivity.this, SelectFile.class);
    					// Si c'est un fichier...
    					if(fichier.isFile()){
    					    t.putExtra("nom", fichier);
    					    startActivity(t);
    						}
    					else
    						// Sinon c'est un répertoire
    						updateDirectory(fichier);
    Le résultat du débug est le suivant:

    Pour la variable fichier dans l'enfant:
    fichier=File id=(une suite de chiffres)
    path=/storage/sdcard0/.aide/monfichier

    Donc pas de soucis de ce coté là...

    Pour la variable Variable dans le parent ....rien!!!
    Pourquoi?

    Je ne comprends pas pourquoi je n'arrive pas à récupérer le extrasgetstring que j'ai envoyé depuis avec le putExtra???

    Je m'arrache les cheveux!!

    Merci d,avance pour votre aide.

  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
    Je ne comprends pas...

    Tu as une activité A qui demande un fichier...
    Pour ce faire elle passe par une activité B.... jusque là pas de problème...

    Par contre dans le code je ne vois ni le code d'appel de A à B, ni la lecture de la réponse de B (retour à A) ?

    Tout ce que je vois c'est un empilage d'activités....
    A=>B=>A=>B=>A=>B=>A etc...
    Ça risque d'être long pour l'utilisateur pour sortir de l'application.

    Je ne vois même pas le code qui fait le "debug".

  3. #3
    Membre averti
    Homme Profil pro
    artisan
    Inscrit en
    Octobre 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : artisan
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2013
    Messages : 47
    Par défaut
    Bonjour nicroman,

    J'avoue ne pas comprendre ce que tu veux dire:

    A=SelectFile
    B=ExplorateurActivity

    A appelle B avec la méthode intent puis quand B a sélectionné le fichier elle appelle A avec la méthode intent.

    La condition if (extras != null) est bien respectée au premier lancement de A.

    Ce n'est qu'un extrait du code qui pour ça semble fonctionner. Je veux aller de A dans B tant que je veux sélectionner un fichier et l'afficher dans un textview ou autre de A.


    Un bouton dans A validera ensuite pour aller dans C....

    Toujours est il que cette variable Variable dans A ne récupère pas la variable fichier de B!

    Je penche pour un problème avec le type de variable et la méthode pour la récupérer: (ici putExtra mais pour quel type de variable et pareil pour le Extra.getString??)
    Est-ce que c'est une chaine de caractère...pour moi oui..mais...

    En debug je peux lire la valeur de la variable fichier dans B:
    /storage/sdcard0/..etc

    La valeur de la variable Variable dans A:
    null


    Merci pour ta réponse en tout cas.

  4. #4
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Par défaut
    Bonjour,

    Je pense que ce que veux dire Nicroman est que l'activité B ne doit pas appelé A mais retourner une réponse.

    Pour ce faire, l'activité B doit se terminé en ajoutant un résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    setResult (...);
    finish ();
    Et l'activité A peut récupérer le résultat dans la fonction onActivityResult.

    De plus, lorsque tu appelles B, tu dois utiliser la fonction startActivityForResult et non startActivity.

  5. #5
    Membre averti
    Homme Profil pro
    artisan
    Inscrit en
    Octobre 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : artisan
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2013
    Messages : 47
    Par défaut
    Bonjour David55,

    et merci.

    Donc si je comprends bien je devrais procéder comme suit:

    A:Selectfile
    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
    public class SelectFile extends Activity {
    Button selection;
    TextView textView1;
    String extras = null;
    int fichier;
     /** Called when the activity is first created. */
     @Override
     public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.selectfile);
         selection=(Button)findViewById(R.id.selection);
         selection.setOnClickListener(new OnClickListener () {
       public void onClick (View view) {
    	 Intent intent=new Intent(SelectFile.this,ExplorateurActivity.class);
    	 startActivityForResult(intent,fichier);
     }
     });   
     }
     public void onActivityResult (int fichier){
    	 setContentView(R.layout.selectfile);
         textView1 = (TextView)findViewById(R.id.textView1);
    	 textView1.setText(fichier);
     }
    }
    B:ExplorateurActivity(extrait)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public void onItemClick(AdapterView<?> adapter, View view,
    						int position, long id) {
    					File fichier = mAdapter.getItem(position);
    					// Si c'est un fichier...
    					if(fichier.isFile()){
    						setResult(fichier);
    						finish();	
    						}
    					else
    						// Sinon c'est un répertoire
    						updateDirectory(fichier);
    C'est donc le setResult de B qui renvoie la valeur de la variable fichier dans A qui l'attend avec onActivityResult?

    Le problème c'est que le setResult n'accepte pas ma variable fichier!!
    The method setResult(int) is not applicable for the argument File
    Change type of "fichier" to "int"
    Create a method setResult(File)
    Create a method setResult(File) in type ExplorateurActivity
    J'avoue que là je suis à la ramasse...Un bon coup de main ne serait pas de refus

  6. #6
    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
    En fait c'est un peu plus complexe que celà, mais pas loin...

    http://developer.android.com/referen...tingActivities

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
       private static final int SELECT_FILE_REQUEST = 23984; // <= unique !
     
      @Override
      public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.selectfile);
     
        selection=(Button)findViewById(R.id.selection);
        selection.setOnClickListener(new OnClickListener () {
            public void onClick (View view) {
              Intent intent=new Intent(SelectFile.this,ExplorateurActivity.class);
              startActivityForResult(intent,SELECT_FILE_REQUEST);
            } });
      }
     
      @Override
      public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == SELECT_FILE_REQUEST) {
          if (resultCode == RESULT_OK) {
            // l'utilisateur a choisi un fichier
            File fichier = new File(data.getUri());
            textView.setText(fichier.toString()); 
          } // else l'utilisateur a fait "back"
        } else
          super.onActivityResult(requestCode,resultCode,data);
      }
    et B:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public void onItemClick(AdapterView<?> adapter, View view, int position, long id) {
        File fichier = mAdapter.getItem(position);
        // Si c'est un fichier...
        if (fichier.isFile()) {
            Intent data = new Intent("FILE",Uri.fromFile(fichier));
            setResult(RESULT_OK,data);
            finish();	
        } else
            updateDirectory(fichier);
    }

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

Discussions similaires

  1. Passage d'une variable
    Par agencep dans le forum Langage
    Réponses: 6
    Dernier message: 23/02/2006, 15h57
  2. passage d'une variable javascript dans du html
    Par the_ugly dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 01/02/2006, 16h08
  3. passage d'une variable dans une frame
    Par Atchoum_002 dans le forum Langage
    Réponses: 2
    Dernier message: 17/10/2005, 17h06
  4. passage d'une variable en parametre
    Par duga dans le forum Langage
    Réponses: 4
    Dernier message: 11/09/2005, 12h19
  5. [C#] Passage d'une variable pour un controluser
    Par julio84 dans le forum ASP.NET
    Réponses: 10
    Dernier message: 07/04/2005, 13h50

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