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 :

Communication de données entre 2 sous activités


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Par défaut Communication de données entre 2 sous activités
    Salut,

    j'aimerai savoir comment faire pour envoyer des données d'une sous activité vers une autre, dans la même application.
    En fait, la première sous activité permet à l'utilisateur de sélectionner la catégorie et la ville puis en cliquant sur le bouton recherche, il sera affiché une liste des formations triés selon ses choix.
    J'ai réussi l'affichage de la liste de ceux derniers mais le problème c'est que la liste de choix reste toujours affichée, c'est pourquoi j'ai pensé qu'il faut rediriger vers une autre sous activité.

    Comment communiquer le choix de catégorie et ville à l'autre sous activité?
    Est ce en utilisant intent.putExtra() dans la première sous activité dans laquelle il y a la liste de choix puis en utilisant getExtra dans la 2ème qui devra afficher le résultat?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    @Override
    	public void onClick(View arg0) {
     
     
    	    String catégorie = listeCat.getSelectedItem().toString();
    		String ville = listeVille.getSelectedItem().toString();
    		Intent intent = new Intent(this,Main3.class);
    		intent.putExtra("ville", ville);
    		intent.putExtra("catégorie", catégorie);
    }
    Merci

  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
    En fait l'activité principale c'est le choix d'une formation...
    C'est donc elle qui doit être la première.

    Si celle-ci a besoin d'information supplémentaire, elle peut "ouvrir" une activité annexe pour récupérer des données...
    (regardes la fonction startActivityForResult() )

    A: startActivityForResult(B, TOTO); (TOTO étant une valeur que tu choisis)
    B: selection ville/...
    B: a la fin (validation), setResult(success,intent de retour); finish();
    A: onActivityResult(TOTO, intent de retour de B)
    A: mise à jour de la liste

    Comme ca l'utilisateur peut choisir une nouvelle selection à tout moment.

  3. #3
    Membre éclairé Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Par défaut
    le probleme c'est qu'il y a plusieurs choix, y'aura pleins de switch(ville) case tunis case sfax etc et switch(categorie) cad la valeur a envoyer pour la fonction startActivityFor result a plusieurd possibilité . n'y a t il pas un autre moyen pour récuperer directement la valeur choisis?

  4. #4
    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
    Un grand homme de la POO (Stroustrup) a un jour dit: le 'switch' est à bannir
    En fait, en POO aucun switch ne peut être remplacé par une solution orientée objet.

    Mais bon, comme je ne connais pas ton code exactement, le switch est peut-être adapté....

    Mais si j'ai bien compris:
    * Il y a un filtrage sur catégorie / ville / ... dans une liste de l'activité "LISTE"
    * Le choix de ces éléments est fait dans une activity "CHOIX"
    * Il suffit donc quand "LISTE" demande à "CHOIX" que "CHOIX" lui réponde les catégorie / ville / .... choisies.

    Cela se fait exactement comme tu l'as décri dans ton premier message (putExtra...), sauf qu'il est plus judicieux de démarrer l'activité "CHOIX" avec un startActivityForResult() , pour celui-ci de remplir l'intent de retour (comme tu l'as déjà écrit), et à la réception du retour dans LISTE décoder l'Intent de retour (getStringExtra()... ).

  5. #5
    Membre éclairé Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Par défaut
    Voilà mon essai qui a engendré des erreurs lors de son éxècution:
    classe Main2: dans laquelle il y a la liste de choix
    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
     
    package com.example.trainingcenter;
    public class Main2 extends ListActivity implements OnClickListener {
    	private Spinner listeVille = null;
    	private Spinner listeCat = null;
    FormationBDD formationBdd;
    	Formation liste;
     
    	public final static String VILLE = "com.example.trainingcenter.VILLE";
    	public final static String CATEGORIE = "com.example.trainingcenter.CATEGORIE";
     
    @Override
    	public void onClick(View arg0) {
    		// TODO Auto-generated method stub
     
    	    String catégorie = listeCat.getSelectedItem().toString();
    		String ville = listeVille.getSelectedItem().toString();
    		Intent result = new Intent(Main2.this, Main3.class);
    		result.putExtra(VILLE, ville);
    		result.putExtra(CATEGORIE, catégorie);
     
    		startActivity(result);
    }
    }
    class Main3: affiche la liste qui contient: les formations selon ces choix
    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
     
    package com.example.trainingcenter;
    public class Main3 extends ListActivity {
    	//private Button recherche;
    	 // L'identifiant de notre requête
    	 // public final static int CHOOSE_BUTTON_REQUEST = 0;
    	  // L'identifiant de la chaîne de caractères qui contient le résultat de l'intent
    	 // public final static String BUTTONS = "com.example.trainingcenter.Main2";
     
    	FormationBDD formationBdd;
    	Formation liste;
     
    	@Override
    	  public void onCreate(Bundle savedInstanceState) {
    	    super.onCreate(savedInstanceState);
    	    setContentView(R.layout.resultat_list);
    	 // On récupère l'intent qui a lancé cette activité
    	    Intent i = getIntent();
    	    String ville = i.getStringExtra(Main2.VILLE);
    	    String catégorie = i.getStringExtra(Main2.CATEGORIE);
    	    liste = formationBdd.getFormation(ville, catégorie); 
    	    if (liste == null)
    	        Toast.makeText(Main3.this, "liste de formation vide ", Toast.LENGTH_LONG).show();
    	        else
    	        	DataBind(ville, catégorie);
    }
     public void DataBind(String ville, String catégorie){
     
    	    	Cursor c = formationBdd.recupererChoixFormations(ville, catégorie);
    	    	startManagingCursor(c);
    	    	SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
    	    	R.layout.list_item,c,new String[]{"libellé","tel","email","adresse","ville","catégorie"},
    	    	new int[]{R.id.textLibellé,R.id.TextTel,R.id.TextEmail,R.id.TextAdresse,R.id.TextVille,R.id.TextCatégorie});
    	    	setListAdapter(adapter);
    	    }
    }
    LogCat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    12-14 01:24:21.455: E/AndroidRuntime(14789): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.trainingcenter/com.example.trainingcenter.Main3}: java.lang.NullPointerException
    12-14 01:24:21.455: E/AndroidRuntime(14789): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1970)
     
    12-14 01:24:21.455: E/AndroidRuntime(14789): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1995)
    NB: j'ai ajouté la déclaration de l'activité dans manifest:
    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
     <activity
                android:name="com.example.trainingcenter.Main"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
     
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
             <activity
                android:name="com.example.trainingcenter.Main2"
                android:label="Sous activité" >
     
            </activity>
              <activity
                android:name=".Main3"
                android:label="Sous activité 2" >
     
            </activity>
    c'est quoi la faute? pouvez vous m'aider? merci

  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
    Je sais pas... c'est marqué dans l'erreur:
    ActivityThread.java:1970

    il manque du logcat....

    Mais je parie que c'est sur le formationBdd.xxxxxx
    Vu qu'il n'est pas initialisé

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/11/2010, 16h42
  2. Communication de données entre 2 formulaires
    Par juju05 dans le forum Langage
    Réponses: 2
    Dernier message: 18/05/2010, 14h59
  3. Partage de donnée entre VI, sous-VI en temps réel
    Par Wazizgood dans le forum LabVIEW
    Réponses: 6
    Dernier message: 01/03/2008, 20h21
  4. Réponses: 5
    Dernier message: 01/10/2006, 13h48
  5. Réponses: 1
    Dernier message: 11/07/2006, 22h05

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