com.hero Posted July 16, 2010 Share Posted July 16, 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! Link to comment Share on other sites More sharing options...
acesyde Posted July 16, 2010 Share Posted July 16, 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 ;) Link to comment Share on other sites More sharing options...
com.hero Posted July 16, 2010 Author Share Posted July 16, 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? Link to comment Share on other sites More sharing options...
Pierre87 Posted July 16, 2010 Share Posted July 16, 2010 ouais, mais ce sot des valeurs "primitives" pour un objet, tu peux le sauver dans une variable "static" Link to comment Share on other sites More sharing options...
com.hero Posted July 16, 2010 Author Share Posted July 16, 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 Link to comment Share on other sites More sharing options...
Pierre87 Posted July 16, 2010 Share Posted July 16, 2010 t'as fait le tuto java du site du zero ? (ou un equivalent) Link to comment Share on other sites More sharing options...
com.hero Posted July 16, 2010 Author Share Posted July 16, 2010 Il y a fort longtemps :| Link to comment Share on other sites More sharing options...
Pierre87 Posted July 16, 2010 Share Posted July 16, 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ù Link to comment Share on other sites More sharing options...
com.hero Posted July 19, 2010 Author Share Posted July 19, 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! Link to comment Share on other sites More sharing options...
Pierre87 Posted July 19, 2010 Share Posted July 19, 2010 pourquoi ne pas faire un getMillis() et le transmettre bêtement à ton activity via l'intent? Link to comment Share on other sites More sharing options...
com.hero Posted July 19, 2010 Author Share Posted July 19, 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! Link to comment Share on other sites More sharing options...
Pierre87 Posted July 19, 2010 Share Posted July 19, 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 Link to comment Share on other sites More sharing options...
com.hero Posted July 20, 2010 Author Share Posted July 20, 2010 J'essaye ca dans la matinée! Je te remercie! EDIT : Bingo, je te paye une bière quand tu veux! Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.