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

Composants graphiques Android Discussion :

Conversion d'un menu en bouton en menu en onglets


Sujet :

Composants graphiques Android

  1. #21
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 61
    Par défaut
    Citation Envoyé par Feanorin Voir le message
    C'est bien ce que je pensais aussi, enfin il faudrait creuser la dedans...
    Peut être il faudrait que tu places directement le context de ta tabActivity sans passer par getParent().
    Car ton spinner est dans une Acitivty descendant de ta TabActvity ou d'un groupe d'Activity ?
    Eux..je n'ai pas compris ta question. Mon spinner est dans une activité fille, lancée par Tab1GroupActivity qui étend TabGroupActivity, mon architecture respecte le lien que AndroChristophe a donné.

    Citation Envoyé par Feanorin Voir le message
    C'était juste un concept que je parlais non pas une variable state qui existe. je voulais juste t'expliquer que tu peux créer une variable dans le TabActivity te permettant de savoir où tu en es à partir de celle ci , puisque c'est elle qui relie toutes les Activity et qui permet de switcher entre les onglets.

    Après si tu penses ne pas en avoir besoin alors ne l'utilises pas . C'est juste pour centraliser ton état dans l'Activity Parente.

    J'essaye de suivre je vais faire un schéma

    TabActivity

    Onglet1 Onglet2 Onglet3

    GroupAct0 Act3 Act4

    Act1 Act2


    En fait tu voudrais switcher entre l'Act1 et l'Act2 ?

    Est ce que c'est cela ?
    Oui, c'est exactement cela

    Merci pour ton aide en tout cas, j’espère pouvoir rendre le tout fonctionnel rapidement, c'est dommage de passer du temps dans cette "conversion" en onglet

  2. #22
    Expert confirmé

    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
    Par défaut
    Eux..je n'ai pas compris ta question. Mon spinner est dans une activité fille, lancée par Tab1GroupActivity qui étend TabGroupActivity, mon architecture respecte le lien que AndroChristophe a donné.
    Yep sauf ce que tu as besoin comme Contet ce n'est pas celui du Parent de ton ActivityGroup mais celui de ta TabActivity ( la class qui contient ta TabHost ).

    La nuance est là.


    Oui, c'est exactement cela
    Donc il y a quelque chose qui me dérange avec cette architecture , l'Activity group te sers à empiler les activity, là ce que tu te demandes c'est de choisir entre deux activity , du coup je en vois pas trop l'intérêt d'utliser l'ActivityGroup.

    Soit u modifies à la mano ton TabHost pour changer l'activity en cours sur ton onglet 1.
    Soit ce que tu peux faire c'est de créer n onglet +1 , et tu swicthes entre l'onglet 1 (Activity A ) et 1bis (Activity B) en cachant celui que tu n'utilises pas . Ce qui aura comme rendu pour l'utilisateur l'effet voulue, cela peut être une piste.

  3. #23
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 61
    Par défaut
    Citation Envoyé par Feanorin Voir le message
    Yep sauf ce que tu as besoin comme Contet ce n'est pas celui du Parent de ton ActivityGroup mais celui de ta TabActivity ( la class qui contient ta TabHost ).

    La nuance est là.
    Ducoup, ce serait un getParent().getParent(), non ? J'ai essayé, sans succès...

    Citation Envoyé par Feanorin Voir le message
    Donc il y a quelque chose qui me dérange avec cette architecture , l'Activity group te sers à empiler les activity, là ce que tu te demandes c'est de choisir entre deux activity , du coup je en vois pas trop l'intérêt d'utliser l'ActivityGroup.

    Soit u modifies à la mano ton TabHost pour changer l'activity en cours sur ton onglet 1.
    Soit ce que tu peux faire c'est de créer n onglet +1 , et tu swicthes entre l'onglet 1 (Activity A ) et 1bis (Activity B) en cachant celui que tu n'utilises pas . Ce qui aura comme rendu pour l'utilisateur l'effet voulue, cela peut être une piste.
    Justement, la modification "à la mano", je vois pas comment la faire. Pour mieux comprendre mon objectif, et peut être mon architecture, je vais expliquer ce que cet onglet là fait. C'est l'onglet "mon compte". Si l'utilisateur n'a pas de compte, la création de compte s'affiche, sinon, c'est les informations de compte qui s'affichent.

    La solution d'un onglet bis est bien pensé, après, faut voir si c'est la solution la plus propre... C'est quand même étrange de faire comme ça je trouve.

  4. #24
    Expert confirmé

    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
    Par défaut
    Ducoup, ce serait un getParent().getParent(), non ? J'ai essayé, sans succès...
    Essaye comme cela

    TaTabActivity.this au lieu des GetParent(). ( la tabactivty qui contient le TabHost)).

    Justement, la modification "à la mano", je vois pas comment la faire. Pour mieux comprendre mon objectif, et peut être mon architecture, je vais expliquer ce que cet onglet là fait. C'est l'onglet "mon compte". Si l'utilisateur n'a pas de compte, la création de compte s'affiche, sinon, c'est les informations de compte qui s'affichent.
    Dans ce cas pourquoi ne pas les imbriqué , du style toujours passer en premier par l'Activity A qui contient la vérification de compte , si le compte est activé on passe à l'activité B , cela me semble plus logique est ton architecture ressempblerais à cela :

    GroupActivity0 -> Activity A -> Activity B

    Avec une Actvity A qui ne fera que contrôlé si le compte est validé , reste si non , passe à la b si oui .

  5. #25
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 61
    Par défaut
    Citation Envoyé par Feanorin Voir le message
    Essaye comme cela

    TaTabActivity.this au lieu des GetParent(). ( la tabactivty qui contient le TabHost)).
    J'ai essayé mais je n'ai pas d'instance de mon activity qui contient le tabHost, donc forcément ça passe pas à la compil'. De plus, je n'ai pas de tabActivity qui contient le tabHost... J'ai une activité principale qui contient le tabHost, puis je crée des tabSpec avec les intents auquel j'ajoute mes TabActivity (voir tuto que j'ai suivi en première page).

    Citation Envoyé par Feanorin Voir le message
    Dans ce cas pourquoi ne pas les imbriqué , du style toujours passer en premier par l'Activity A qui contient la vérification de compte , si le compte est activé on passe à l'activité B , cela me semble plus logique est ton architecture ressempblerais à cela :

    GroupActivity0 -> Activity A -> Activity B

    Avec une Actvity A qui ne fera que contrôlé si le compte est validé , reste si non , passe à la b si oui .
    A la question pourquoi je réponds : parce qu'en procédant ainsi, quand l'utilisateur est sur son compte et qu'il appuie sur back, il se retrouve sur la création... Création qu'il a peut être fait l'année dernière ^^
    Au moment de lancer la visualisation de compte, j'ai essayé de faire un finish(), mais ça me lance une exception... J'ai un nullPointerException au niveau de la classe TabActivity à la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Intent lastIntent = manager.getActivity(lastId).getIntent();

  6. #26
    Expert confirmé

    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
    Par défaut
    J'ai essayé mais je n'ai pas d'instance de mon activity qui contient le tabHost, donc forcément ça passe pas à la compil'. De plus, je n'ai pas de tabActivity qui contient le tabHost... J'ai une activité principale qui contient le tabHost, puis je crée des tabSpec avec les intents auquel j'ajoute mes TabActivity (voir tuto que j'ai suivi en première page).
    Euh , la tabHost était pour bien te préciser de quelle activity je parlais.

    Après pour la compilation cela ne change rien de toute manière tu récupères le context en static , donc il te faut juste l'import nécessaire.

    Si par contre tu arrives à le retrouver à partir des parents je suis preneur .
    il faudrait peut être se mettre en debug et voir ou se trouve le context de ta TabActivity qui elle permet d'afficher le spinner et boite de dialogue.

    A la question pourquoi je réponds : parce qu'en procédant ainsi, quand l'utilisateur est sur son compte et qu'il appuie sur back, il se retrouve sur la création... Création qu'il a peut être fait l'année dernière ^^
    Au moment de lancer la visualisation de compte, j'ai essayé de faire un finish(), mais ça me lance une exception... J'ai un nullPointerException au niveau de la classe TabActivity à la ligne :
    Il ne faut pas faire le finish à cet endroit mais lorsque ton activity B se ferme tu reviens à la A donc tu la ferme également avant qu'elle s'affiche .

  7. #27
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 61
    Par défaut
    Citation Envoyé par Feanorin Voir le message
    Euh , la tabHost était pour bien te préciser de quelle activity je parlais.

    Après pour la compilation cela ne change rien de toute manière tu récupères le context en static , donc il te faut juste l'import nécessaire.

    Si par contre tu arrives à le retrouver à partir des parents je suis preneur .
    il faudrait peut être se mettre en debug et voir ou se trouve le context de ta TabActivity qui elle permet d'afficher le spinner et boite de dialogue.
    Je vais essayer pour le mode débug, mais en tout cas, à la compilation MainActivity.this me donne un "No enclosing instance of the type MainActivity is accessible in scope"


    Citation Envoyé par Feanorin Voir le message
    Il ne faut pas faire le finish à cet endroit mais lorsque ton activity B se ferme tu reviens à la A donc tu la ferme également avant qu'elle s'affiche .
    Et comment je sais cela (activité B se ferme, retourne à la A et execute ma méthode) ? Car le seul moyen que je connais, c'est le startActivityForResult qui ne fonctionne pas avec ces fameux onglets !


    EDIT : Pour rester dans le concret, le problème que j'évoquais également à la page précédente se situe dans le cas ou l'onglet 1 appelle l'onglet 4 (l'onglet du compte) car il faut pour poursuivre avoir un compte. A la fin de la création du compte, il faudrait donc repasser sur l'onglet 1... Donc il faut que je sache qui à appeler l'onglet 4 de création de compte.

    Onglet 1 -> nécessité d'avoir un compte après une action dans l'onglet 1 -> Lancement Onglet 4 (onglet compte) -> enregistrement d'un compte ->retour sur onglet 1

  8. #28
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 61
    Par défaut
    Je n'arrive pas bien à me servir du mode debug pour les problèmes de contexte sur le spinner... Comment voir ou se situe le contexte du tabActivity ?

    Sinon, j'ai toujours les problèmes d'enchainement d'activités cités dans mon poste précédent... Je craque ! Si compliqué pour si simple... Personne n'a de solution à me proposer ?

  9. #29
    Expert confirmé

    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
    Par défaut
    Je n'arrive pas bien à me servir du mode debug pour les problèmes de contexte sur le spinner... Comment voir ou se situe le contexte du tabActivity ?
    Exactement je ne sais pas, mais il faut que tu regardes ce que contient ton spinner tu dois avoir une variable mContext dedans , il faudrait la comparer avec celle de ta TabActivity .

    EDIT : Pour rester dans le concret, le problème que j'évoquais également à la page précédente se situe dans le cas ou l'onglet 1 appelle l'onglet 4 (l'onglet du compte) car il faut pour poursuivre avoir un compte. A la fin de la création du compte, il faudrait donc repasser sur l'onglet 1... Donc il faut que je sache qui à appeler l'onglet 4 de création de compte.

    Onglet 1 -> nécessité d'avoir un compte après une action dans l'onglet 1 -> Lancement Onglet 4 (onglet compte) -> enregistrement d'un compte ->retour sur onglet 1
    Après il n'y a pas que le startOnActivityResult , on peut se créer soit même une variable te permettant de savoir d'ou tu vient ou tu va dans un TabActivity puisque celle ci continu a exister pour ta TabGroupActivity d'ailleurs il me semble.

    Après si vraiment tu galères tu n'a pas moyen de créer une nouvelle architecture plus simple , ou la demande de connection au compte se ferait en dehors de ta TabActivity ?

  10. #30
    Membre émérite Avatar de cadoudal56
    Profil pro
    Inscrit en
    Février 2005
    Messages
    694
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 694
    Par défaut
    Hello,

    Je suis tombé sur cette discussion parce que je rencontre le même problème et cela fait facile 4 heures que je galère. Cependant je viens de trouver la solution a ton probleme de spinner.

    J'ai trouvé ce bout ce code sur une discussion d'un autre forum qui s'appelle "Android :WindowManager$BadTockenException on Spinner Click".

    Voici le bout de code fournit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    View viewToLoad = LayoutInflater.from(this.getParent()).inflate(yourlayout, null);
    this.setContentView(viewToLoad);  
    Spinner s2 = (Spinner) viewToLoad.findViewById(R.id.spinnerCountry);
     
    ArrayAdapter<CharSequence> adapterCountry=new ArrayAdapter(this.getParent(),android.R.layout.simple_spinner_item,country);
    adapterCountry.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    s2.setAdapter(adapterCountry);
    Ce que j'ai fait :

    A la place de ce bout de code dans mon script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    setContentView(R.layout.mapage);
    J'ai mis cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    View contentView = LayoutInflater.from(getParent()).inflate(R.layout.mapage, null);
    this.setContentView(contentView);
    Et a la place de ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ArrayAdapter<String> myAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item);        
     
    myAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    mySpinner.setAdapter(myAdapter);
    J'ai mis cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    String[] country={"Please selects","US","INDIA","UK"};
    Spinner pageNoSpinner = (Spinner) contentView.findViewById(R.id.my_spinner);
            ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(getParent(), android.R.layout.simple_spinner_item, country);
    Evidemment tu va avoir quelques petites adaptations à faire, mais pour avoir galéré pendant 4 heures je peux te dire que c'est la solution. Vraisemblablement les tabActivity et les spinners ne font pas bon ménage dans les problemes de contextes.

    En esperant que cela pourra t'aider...

    @+
    Cadou

  11. #31
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 61
    Par défaut
    @cadoudal56 : Mon sauveur
    Merci beaucoup pour cette astuce, mes spinners fonctionnent ENFIN ! Par contre, de mon coté, j'ai juste eu besoin de remplacer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setContentView(R.layout.mapage);
    par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.setContentView(LayoutInflater.from(getParent()).inflate(R.layout.mapage, null));
    Je n'ai rien eu d'autre à changer.

    @Feanorin : Effectivement je peux surement me créer une petite variable globale perso, j'aime pas vraiment cette façon de faire mais bon... si quelqu'un à mieux, qu'il le fasse savoir
    Pour le problème de mon compte (création ou consultation, donc deux activity possible selon le contexte pour un seul onglet), j'ai suivis ton conseil, ça fonctionne nickel (cad que j'ai créé deux onglets, et j'en cache toujours un).

    Encore merci, je commence à voir le bout de cette conversion grâce à vous tous :=)
    Il ne me reste plus qu'à remplacer les startActivityForResult et plus généralement de gérer la communication inter-activité.

    EDIT : J'en profite pour poser une nouvelle question, en lien avec le startActivityForResult. Avant, j'avais trois activity "liée", c'est à dire que quand la troisième se terminait, je fermais les deux précédentes. J'effectuais cette opération grâce au startActivityForResult. Pour le coup, même avec une variable globale, je vois pas bien comment reproduire ce comportement.

  12. #32
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 61
    Par défaut
    J'ai parlé trop vite ! Les spinners "réparés" créent de nouveaux problèmes... En effet, j'ai des onClick dans mon XML qui vont maintenant chercher les méthodes dans le Tab au lieu du child...

    J'ai essayé une redirection, mais les findViewByID ne fonctionnent alors plus (renvoie null, même avec un getParent())... Idem si j'essaye de déplacer les méthodes.

    EDIT : Bon, j'ai réussi à faire de la redirection... mais plus ça va plus mon code devient moche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((MyActivity) this.getCurrentActivity()).theOnClickMethod(v);

  13. #33
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 61
    Par défaut
    Bon, bonne nouvelle : ce sujet passera surement bientôt en résolu :=)
    J'ai, grâce à tout ceux qui m'ont aidés sur ce topic (merci ), résolu une grande partie des (très très) nombreux problèmes rencontrés avec les onglets !

    Il me reste encore une question la, tout de suite (en espérant ne pas me rendre compte d'un oublie plus tard).

    Le onBackPressed réagit très très mal ! En effet, il semble que la "mIdList" du tabGroupActivity ne contienne pas toujours les bonnes informations relatives aux childs lancés. Résultat, bien que la fonction onBackPressed semble être correct, il arrive qu'un appuie sur le bouton retour termine l'activité parente et donc l'application, et il arrive au contraire que cela ne fasse rien.

    Rappel du code du onBackPressed du TabGroupActivity donné en lien précédemment (tout à faire "correct" à mon gout je le rappelle):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    @Override
    	public void onBackPressed () {
    		int length = mIdList.size();
     
    		if ( length > 1) {
    			Activity current = getLocalActivityManager().getActivity(mIdList.get(length-1));
    			current.finish();
    		}
    	}
    Mon but étant d'afficher une pop-up de fin d'application à l'appuie sur le bouton retour lorsque l'on se trouve sur une activité parente, voyez-vous une solution ?

  14. #34
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 61
    Par défaut
    Après les problèmes du onBackPressed (voir juste au dessus, toujours pas résolu)... un nouveau problème se pose à moi : le startActivityForResult.

    Bien que je l'utilisais avant, j'ai toujours réussi à le remplacer en passent des "extras" à mes activités.

    Seulement là, je ne vois pas comment faire. Je fais appel à la galerie du téléphone (activité que je ne contrôle donc pas), et je souhaite récupérer son résultat, à savoir l'image sélectionnée si une image a été sélectionnée. Sans startActivityForResult... je vois vraiment pas comment cela serait possible !
    Et avec... cela ne marche pas, car le startActivityForResult n'est pas appelé avec le système d'onglet.

    Au cas ou cela viendrait de mon code, je vous donne ce que j'ai écris.

    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
    public void launchGallery(View v){
     
    	Intent launchGalleryIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    	getParent().startActivityForResult(launchGalleryIntent, REQ_CODE_PICK_IMAGE); 
     
    }
     
    protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) { 
    	    Toast.makeText(getParent(), "activity result", Toast.LENGTH_LONG).show();
    		super.onActivityResult(requestCode, resultCode, imageReturnedIntent); 
     
    	    switch(requestCode) { 
     
    		    case REQ_CODE_PICK_IMAGE:
     
    		    	if(resultCode == RESULT_OK){  
    		            Uri selectedImageUri = imageReturnedIntent.getData();
    		            String[] filePathColumn = {MediaStore.Images.Media.DATA};
     
    		            Cursor cursor = getContentResolver().query(selectedImageUri, filePathColumn, null, null, null);
    		            cursor.moveToFirst();
     
    		            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
    		            String filePath = cursor.getString(columnIndex);
    		            cursor.close();
     
    		            Bitmap selectedImage = BitmapFactory.decodeFile(filePath);
     
     
    		        }
     
    		    }
     
    	}
    EDIT : Désolé pour l'indentation, j'arrive pas à bien indenter sur le forum...

Discussions similaires

  1. bouton avec menu déroulant dans la tool bar.
    Par archerhawke dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 27/10/2009, 19h50
  2. [FLASH 8] Transition sur bouton de menu deroulant
    Par chienlou dans le forum Flash
    Réponses: 3
    Dernier message: 05/06/2006, 10h13
  3. Problème avec Goto pour un bouton de menu
    Par Klotian dans le forum Flash
    Réponses: 3
    Dernier message: 26/05/2006, 17h49
  4. Réponses: 3
    Dernier message: 13/06/2005, 12h05

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