com.hero Posté(e) 16 juillet 2010 Share Posté(e) 16 juillet 2010 Salut à tous! J'ai raté une branche je crois, je lance une nouvelle Activity Intent toto = new Intent(this, Toto.class); this.startActivity(toto); Dans ma nouvelle Activity, j'ai besoin de récupérer un attribut de la classe lanceuse. Comment ca se passe? Car on passe le context à l'Intent, j'essaye de le récupérer et de le caster, mais ca ne fonctionne pas! J'ai bien ce post https://forum.frandroid.com/forum/viewtopic.php?id=8930 mais je ne vois pas en quoi cela me servirais :/ Merci de votre aide! Lien vers le commentaire Partager sur d’autres sites More sharing options...
acesyde Posté(e) 16 juillet 2010 Share Posté(e) 16 juillet 2010 Pour passer quelque chose à une activité grâce aux intents utilise la méthode putExtra Documentation ici : http://developer.android.com/reference/android/content/Intent.html Je te laisse chercher un petit peu ;) Lien vers le commentaire Partager sur d’autres sites More sharing options...
com.hero Posté(e) 16 juillet 2010 Auteur Share Posté(e) 16 juillet 2010 Oui, j'ai bien vu ca aussi, mais j'ai une zolie erreur : Parcel : unable to marshal value On ne peut pas passer un objet, il faut le sérialiser, le "Parceler" J'ai bien compris? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Pierre87 Posté(e) 16 juillet 2010 Share Posté(e) 16 juillet 2010 ouais, mais ce sot des valeurs "primitives" pour un objet, tu peux le sauver dans une variable "static" Lien vers le commentaire Partager sur d’autres sites More sharing options...
com.hero Posté(e) 16 juillet 2010 Auteur Share Posté(e) 16 juillet 2010 public class Main extends Activity{ private ArrayList glaces; private static ArrayList liste; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); glaces.add(new Glace()); glaces.add(new Glace()); liste = totos; Intent intent = new Intent(this, Toto.class); intent.putExtra("glaces", liste); this.startActivity(intent); } J'ai la même erreur :/ Et si je déclare la static en variable locale plutôt qu'en attribut, Eclipse me met des erreurs Lien vers le commentaire Partager sur d’autres sites More sharing options...
Pierre87 Posté(e) 16 juillet 2010 Share Posté(e) 16 juillet 2010 t'as fait le tuto java du site du zero ? (ou un equivalent) Lien vers le commentaire Partager sur d’autres sites More sharing options...
com.hero Posté(e) 16 juillet 2010 Auteur Share Posté(e) 16 juillet 2010 Il y a fort longtemps :| Lien vers le commentaire Partager sur d’autres sites More sharing options...
Pierre87 Posté(e) 16 juillet 2010 Share Posté(e) 16 juillet 2010 http://developer.android.com/reference/android/content/Intent.html regarde les méthodes "putXXX" tu peux seulement y mettre des types "simples" donc c'est normal que ton code ne marche pas solution : tu stocke tes données au niveau de la classe (et non dans un objet) comme ça, c'est accessible de n'importe où Lien vers le commentaire Partager sur d’autres sites More sharing options...
com.hero Posté(e) 19 juillet 2010 Auteur Share Posté(e) 19 juillet 2010 Salut, J'ai choisi d'implémenter l'interface parcelable, mais je bloque sur un autre problème. J'utilise la librairie Joda Time. Mes objets contienne une variable de type DateTime de cette librairie. Le problème est que la classe DateTime est finale, je ne peux donc pas l'hériter pour implémenter Parcelable. En revanche, elle implemente Serializable. J'ai vu que Serializable donnait de moins bonnes performances que Parcelable dans le cas d'Android, dois-je utiliser Serializable à la place de Parcelable? En me penchant sur la classe DateTime, il n'y a que des méthodes faisant appel à des constructeurs de la classe mère (BaseDateTime). Si j'implémente Parcelable, ca ne devrait pas poser de problème vu qu'aucun attribut n'est présent, je suis dans le vrai? Merci pour vos lumières! Lien vers le commentaire Partager sur d’autres sites More sharing options...
Pierre87 Posté(e) 19 juillet 2010 Share Posté(e) 19 juillet 2010 pourquoi ne pas faire un getMillis() et le transmettre bêtement à ton activity via l'intent? Lien vers le commentaire Partager sur d’autres sites More sharing options...
com.hero Posté(e) 19 juillet 2010 Auteur Share Posté(e) 19 juillet 2010 Je veux en fait passer un ArrayList, pas seulement la date :/ Toto contient un attribut DateTime L'intérêt, c'est que Toto implémente Parcelable afin de passer le ArrayList en extra, ce qui induit que DateTime doit aussi l'implémenter. Ma question reste entière, en tout cas, merci pour ton acharnement à m'aider! Lien vers le commentaire Partager sur d’autres sites More sharing options...
Pierre87 Posté(e) 19 juillet 2010 Share Posté(e) 19 juillet 2010 ok, pas très compliqué dans ce cas : d'après ce que j'ai compris, quand tu implémentes Parcelable, tu dois "serializer" ton objet "à la main" regardes : http://developer.android.com/reference/android/os/Parcelable.html il y a 2 méthodes importantes : - writeToParcel (pour "sauver" ton objet) - le constructeur (pour "restaurer" ton objet) c'est ici que tu peux transformer ton objet de classe Toto en une suite de variables de type primitif. il te suffit donc de convertir ton DateTime en un long avec getMillis(), et inversement d'utiliser le constructeur de DateTime avec en paramètre un long Lien vers le commentaire Partager sur d’autres sites More sharing options...
com.hero Posté(e) 20 juillet 2010 Auteur Share Posté(e) 20 juillet 2010 J'essaye ca dans la matinée! Je te remercie! EDIT : Bingo, je te paye une bière quand tu veux! Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.