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 :

Finir une activité dans une classe héritant de ListFragment


Sujet :

Android

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 281
    Points : 161
    Points
    161
    Par défaut Finir une activité dans une classe héritant de ListFragment
    Bonjour,

    Mon problème :

    J'aimerais dans ma méthode onListItemClick() tué l'activité MonActivity grâce à la méthode finish().

    Comment puis-je faire ?

    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 com.fragmentmenu;
     
    import com.menu.MenuAdapter;
     
    import android.app.Activity;
    import android.content.Context;
    import android.content.Intent;
    import android.os.Bundle;
    import android.support.v4.app.ListFragment;
    import android.view.View;
    import android.widget.ListView;
    import android.widget.Toast;
     
    public class MenuFragment extends ListFragment {
     
    	final String[] MENU = new String[] { "Item1","Item2","Item3" };
     
     
     
    	public MenuFragment() {
     
    	}
     
    	public static final MenuFragment newInstance(String item) {
    		MenuFragment f = new MenuFragment();
    		Bundle bdl = new Bundle();
    		bdl.putString("my_item", item);
    		f.setArguments(bdl);
    		return f;
    	}
     
    	@Override
    	public void onActivityCreated(Bundle savedInstanceState) {
    		super.onActivityCreated(savedInstanceState);
     
    		String mycurrent = getArguments().getString("my_item");
     
    		setListAdapter(new MenuAdapter(getActivity(), MENU, mycurrent));
    		getListView().setBackgroundColor(R.drawable.fond_menu_tablet);
    		getListView().setCacheColorHint(0);
    	}
     
    	@Override
    	public void onListItemClick(ListView l, View v, int position, long id) {
    		super.onListItemClick(l, v, position, id);
     
    		String mycurrent = getArguments().getString("my_item");
     
     
     
    	}
     
    }

  2. #2
    Membre du Club
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

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

    Informations forums :
    Inscription : Mai 2012
    Messages : 36
    Points : 53
    Points
    53

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 281
    Points : 161
    Points
    161
    Par défaut
    Cela supprimera que mon menu mais pas l'Activity.

    Je veut pouvoir tuer n'importe quel activité a partir de cette méthode

  4. #4
    Membre du Club
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

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

    Informations forums :
    Inscription : Mai 2012
    Messages : 36
    Points : 53
    Points
    53
    Par défaut
    quel menu? normalement ListFragment n'existe pas toute seule , elle appartient à une activité, donc si tu détruit l'activité qui héberge le fragment, tu vas détruire et le fragment et l'activité.

  5. #5
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 281
    Points : 161
    Points
    161
    Par défaut
    Mon ListFragment est instancier dans une classe héritant de Fragment Activity qui est mon menu (comme celui de l'appli Facebook). Donc si je fais getActivity().finish() cela arrêtera mon FragmentActivity.

    Mais moi j'aimerais pouvoir arrêter n'importer quel activité dans ma méthodes OnListitemclick()

  6. #6
    Membre du Club
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

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

    Informations forums :
    Inscription : Mai 2012
    Messages : 36
    Points : 53
    Points
    53
    Par défaut
    Chaque activité gère son propre cycle de vie. donc, je ne pense pas que tu peux terminer une autre activité à partir de ton activité FragmentActivity en utilisant les méthodes onDestroy(), onStop() ou onPause(). La seule solution que je vois est de créer une intention dans FragmentActivity ( dans la méthode OnListitemclick() si tu veux) que tu envoie à l'activité que tu veux détruire et tu mets par exemple un champ extra"destroy". Dans la méthode oncreate de l'activité que tu veux détruire, tu récupère l'intention , tu vérifie s'il y a un champ extra "destroy", si oui, tu appelle la méthode ondestroy() de l'activité en question.

  7. #7
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 281
    Points : 161
    Points
    161
    Par défaut
    Nicroman une idée ?

  8. #8
    Membre du Club
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

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

    Informations forums :
    Inscription : Mai 2012
    Messages : 36
    Points : 53
    Points
    53
    Par défaut
    tu perds rien si tu essayes la mienne
    Au fait, la prochaine fois n'oublie pas de préciser dans l'intitulé de ton sujet, que la question est destinée à une personne en particulier. comme ça on perdra pas le temps à te proposer des solutions!!

  9. #9
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 281
    Points : 161
    Points
    161
    Par défaut
    ma demande n est pas secifique a une personne.

    la méthode onListItemclick() appartient a la class ListFragment et pas a FragmentActivity.

    Mais comment l'activité que je veux finir pourra se fermer puisque l'intention se fait dans mon fragment ? Je ne vais pas faire startActivity()

  10. #10
    Membre du Club
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

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

    Informations forums :
    Inscription : Mai 2012
    Messages : 36
    Points : 53
    Points
    53
    Par défaut
    Oui, Effectivement ListFragment ne peut pas démarrer une activité car elle ne s'agit pas d'une activité. je me demande comment elle peut terminer une activité si elle ne peut pas la démarrer !! je suis curieuse de savoir comment peut on faire cela?

  11. #11
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 281
    Points : 161
    Points
    161
    Par défaut
    Pour plus de compréhension

    En fonction des codes ci-dessous, j'aimerais que lorsque je clique sur Item1 de mon ListFragment, l'acitvité AttualitaActivity se finisse pour pouvoir allé sur une autre activité


    Mon activité AttualitaActivity :

    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
    public class AttualitaActivity extends Activity {
     
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		requestWindowFeature(Window.FEATURE_NO_TITLE);
    		setContentView(R.layout.main);
     
     
    ImageButton btn_show = (ImageButton) findViewById(R.id.menu);
     
     
    			btn_show.setOnClickListener(
    					new View.OnClickListener() {
    						public void onClick(View v) {
    							int width = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40, getResources().getDisplayMetrics())+15;
    							SlideoutActivity.prepare(AttualitaActivity.this, R.id.inner_content, width);
     
    							Intent myintent = new Intent(AttualitaActivity.this,MenuActivity.class);
    							myintent.putExtra("current","item1");
    							startActivity(myintent);
    							overridePendingTransition(0, 0);
    						}
    					});
     
    	}
     
    }

    Mon FragmentActivity

    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
     
     
    public class MenuActivity extends FragmentActivity {
     
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		requestWindowFeature(Window.FEATURE_NO_TITLE);
     
    		Bundle b = getIntent().getExtras();
    		String current_item = b.getString("current");
     
    		mSlideoutHelper = new SlideoutHelper(this);
    		mSlideoutHelper.activate();
    		getSupportFragmentManager()
    				.beginTransaction()
    				.add(R.id.slideout_placeholder,
    						MenuFragment.newInstance(current_item), "menu")
    				.commit();
    		mSlideoutHelper.open();
    	}
     
    	@Override
    	public boolean onKeyDown(int keyCode, KeyEvent event) {
    		if (keyCode == KeyEvent.KEYCODE_BACK) {
    			mSlideoutHelper.close();
    			return true;
    		}
    		return super.onKeyDown(keyCode, event);
    	}
     
    	public SlideoutHelper getSlideoutHelper() {
    		return mSlideoutHelper;
    	}
     
    	private SlideoutHelper mSlideoutHelper;
     
    }
    Et donc mon ListFragment

    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
     
     
    public class MenuFragment extends ListFragment {
     
    	final String[] MENU = new String[] { "Item1","Item2","Item3" };
     
     
     
    	public MenuFragment() {
     
    	}
     
    	public static final MenuFragment newInstance(String item) {
    		MenuFragment f = new MenuFragment();
    		Bundle bdl = new Bundle();
    		bdl.putString("my_item", item);
    		f.setArguments(bdl);
    		return f;
    	}
     
    	@Override
    	public void onActivityCreated(Bundle savedInstanceState) {
    		super.onActivityCreated(savedInstanceState);
     
    		String mycurrent = getArguments().getString("my_item");
     
    		setListAdapter(new MenuAdapter(getActivity(), MENU, mycurrent));
    		getListView().setBackgroundColor(R.drawable.fond_menu_tablet);
    		getListView().setCacheColorHint(0);
    	}
     
    	@Override
    	public void onListItemClick(ListView l, View v, int position, long id) {
    		super.onListItemClick(l, v, position, id);
     
    		String mycurrent = getArguments().getString("my_item");
     
     
     
    	}
     
    }

  12. #12
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 281
    Points : 161
    Points
    161
    Par défaut
    Comment détruire une activité ouverte dans une autre activité ?

  13. #13
    Membre du Club
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

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

    Informations forums :
    Inscription : Mai 2012
    Messages : 36
    Points : 53
    Points
    53
    Par défaut
    Alors, dans la classe AttualitaActivity, tu utilise la méthode startActivityForResult au lieu de startActivity pour que tu puisse détruire AttualitaActivity en utilisant le Resultcode que tu vas définir en appelant setResult(int) dans la classe menuActivity
    Ensuite, dans la classe MenuActivity, tu redéfinis la méthode finish() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public void finish(){
    setResult (2);
    super.finish();
    }
    dans la Listfragment tu appelles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getActivity().finish();
    Enfin dans AttualitaActivity, tu redéfinis onResultActivity:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if(resultCode==2){
            finish();
        }
    }

  14. #14
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 281
    Points : 161
    Points
    161
    Par défaut
    Merci beaucoup cela marche pour AttualitaActivity.

    Cependant j'ai plusieurs activités donc je dois utilisé pour chacune d'entre elle un RESULT CODE.

    Cependant dans ma méthode finish() (classe ListFragment) redéfini je voudrais mettre un int en paramètre. Lorsque je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getActivity().finish(mon int);
    Cela ne marche pas.
    Comment pourrai-je faire pour adapter ce système pour chaque activité ?

  15. #15
    Membre du Club
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

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

    Informations forums :
    Inscription : Mai 2012
    Messages : 36
    Points : 53
    Points
    53
    Par défaut
    benh, tu fais pareil que ce que tu as fais pour l'activité AttualitaActivity.
    tu dois juste faire attention à ne pas utiliser les même resultcode pour deux activités distinctes.
    il n' a pas une méthode qui s'appelle finish(int) mais plutôt finishActivity(int)


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

Discussions similaires

  1. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  2. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  3. portée d'une variable dans une fonction dans une méthode
    Par laurentg2003 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/06/2009, 19h05
  4. Envoyer une formulaire dans une page dans une Frame
    Par zooffy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 29/06/2007, 10h13
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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