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 :

La fonction finish()


Sujet :

Android

  1. #1
    Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mai 2011
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 52
    Points : 60
    Points
    60
    Par défaut La fonction finish()
    bonjour,

    J'ai un listener nommé RetourPageListener lié à un include footer (button valider) de ce type :


    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
    package com.dinasoft.TrouveVelo.listener;
     
    import android.app.Activity;
    import android.view.View;
    import android.view.View.OnClickListener;
     
     
    /**
     * @author didier
     *
     */
    public class RetourPageListener implements OnClickListener{
     
    	private Activity mContext;
     
    	public RetourPageListener(Activity context){
    		this.mContext=context;
    	}
     
    	@Override
    	public void onClick(View v) {
    		// TODO Auto-generated method stub
     
    		mContext.finish();
    	}
     
    }
    dans mon main j'ai l'appel au listener :
    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
    public void onCreate(Bundle savedInstanceState) {
    
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.creersavoiture10);
    
    		RetourPage = (Button) findViewById(R.id.RetourPreced);
    		LongVehicule = (TextView) findViewById(R.id.taille_vehicule);
    		
    		boutonType= (Button) findViewById(R.id.creervalider);
    		ParamBd = new RequeteSeGarer(this);
    		
    		// On ouvre la base de données pour écrire dedans
    		ParamBd.open();
    	
    
    		// listener quand j'appuie sur le bouton type de véhicule
    		boutonType.setOnClickListener(new typeVoiture1Listener(this));
    		
    	
    		RetourPage.setOnClickListener(new RetourPageListener(this));		
    		
    	}
    Normalement en lui passant THIS le Finish devrait appeler le Destroy de l'activité et bien non. Il fait effectivement un Finish mais pas celui de l'activité.

    Je ne comprend pas pourquoi, surtout que la méthode destroy ferme la base de données est passe des valeurs à une autre activité.

    merci de vos retours

    cordialement

  2. #2
    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
    Bonjour,

    La méthode finish appartient à la classe Activiy et non à la classe Context.

    Donc ta méthode ne peux pas marcher.

    Tu peux soit passer l'activity à ta classe RetourPageListener en tant que menbre pour pouvoir la fermer.

    Soit passer par un Handle qui enverra un message à ton Activity ou une autre méthode de message.

    à toi de voir.
    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.

  3. #3
    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
    D'apres le code, il passe bien une activité....

    On peut voir le code du onDestroy ? (parceque si j'ai bien compris il est overridé)
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  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
    D'apres le code, il passe bien une activité....
    Yep

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private Activity mContext;
    Je n'avais pas bien vu, ça pique les yeux quand même comme déclaration .
    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 du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mai 2011
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 52
    Points : 60
    Points
    60
    Par défaut
    voici la méthode destroy(). Comme vous le verrez j'opte pour un singleton plutôt q'un passage par l'intent en parcelable.

    merci de l'aide.

    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
    @Override
    	public void onDestroy() {
    		super.onDestroy();
     
     
    		Intent intent = new Intent();
    		if (VehiculeRetenu != null)
    		{
     
    			// Création et ouverture de la base de données
    			long j=ParamBd.Update_mon_vehiculeDefault0();
    			long i= ParamBd.Insert_mon_vehicule(VehiculeRetenu);
    			PositionCourante.getInstance().setIdVoiture(VehiculeRetenu.getId());
    			PositionCourante.getInstance().setCouleur(VehiculeRetenu.getCouleur());
    			PositionCourante.getInstance().setNumImat(VehiculeRetenu.getNnumero_mmatriculation());
    			ParamBd.close();
    			intent.putExtra("IMMAT", VehiculeRetenu.getNnumero_mmatriculation());
    			setResult(RESULT_OK,intent);
    		}
    		else 
    		{
    			ParamBd.close();
    			intent.putExtra("IMMAT", (String)null);
    			setResult(RESULT_CANCELED, intent);
    			//fermeture de la base de données 
    		}
    	}

  6. #6
    Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mai 2011
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 52
    Points : 60
    Points
    60
    Par défaut je crois savoir ou est mon problème
    en me mettant sur DDMS, je me suis apperçu d'une chose surprenante,

    quand j'appelle le finish dans mon RetourPageListener il va directement à l'activité précédente et appelle la méthode onActivityResult donc mon Resultcode est à 0 et donc l'égalité if (resultCode == RESULT_OK) ne passe pas et j'ai une erreur (Null pointer).

    Mais pendant ce temps du passage à l'activité précédente, il execute la méthode destroy() qui elle passe des valeurs par intent.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    intent.putExtra("IMMAT", VehiculeRetenu.getNnumero_mmatriculation());
    setResult(RESULT_OK,intent);
    Mais il est déjà trop tard.

    j'ai donc un problème d'attendre que destroy effectue son traitement avant qu'il passe à l'activité précédente.

  7. #7
    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
    Oui mais non....

    Une activité ce n'est pas une sous-fonction java... Android peut très bien décider d’exécuter plusieurs thread pour plusieurs activité...
    Dans le onDestroy, c'est fini, l'activité n'existe plus... donc celle qui l'a appelé a déjà reçu son résultat...

    En même temps... pourquoi ne pas surcharger la méthode "finish()" ? (plutot que onDestroy)...

    Ou simplement créer ta propre méthode qui va faire le setResult() et appeler le finish.
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  8. #8
    Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mai 2011
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 52
    Points : 60
    Points
    60
    Par défaut j'ai surchargé FINISH
    effectivement j'ai surchargé Finish et cela marche mieux

    merci beaucoup

    cordialement

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 12/02/2013, 01h08
  2. Fonction API
    Par margilb dans le forum C++Builder
    Réponses: 2
    Dernier message: 08/07/2002, 11h11
  3. Implémentation des fonctions mathématiques
    Par mat.M dans le forum Mathématiques
    Réponses: 9
    Dernier message: 17/06/2002, 16h19
  4. fonction printf
    Par ydeleage dans le forum C
    Réponses: 7
    Dernier message: 30/05/2002, 11h24
  5. FOnction api specifiant la position de la souris
    Par florent dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/05/2002, 20h07

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