com.hero Posté(e) 16 juillet 2010 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!
acesyde Posté(e) 16 juillet 2010 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 ;)
com.hero Posté(e) 16 juillet 2010 Auteur 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?
Pierre87 Posté(e) 16 juillet 2010 Posté(e) 16 juillet 2010 ouais, mais ce sot des valeurs "primitives" pour un objet, tu peux le sauver dans une variable "static"
com.hero Posté(e) 16 juillet 2010 Auteur 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
Pierre87 Posté(e) 16 juillet 2010 Posté(e) 16 juillet 2010 t'as fait le tuto java du site du zero ? (ou un equivalent)
Pierre87 Posté(e) 16 juillet 2010 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ù
com.hero Posté(e) 19 juillet 2010 Auteur 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!
Pierre87 Posté(e) 19 juillet 2010 Posté(e) 19 juillet 2010 pourquoi ne pas faire un getMillis() et le transmettre bêtement à ton activity via l'intent?
com.hero Posté(e) 19 juillet 2010 Auteur 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!
Pierre87 Posté(e) 19 juillet 2010 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
com.hero Posté(e) 20 juillet 2010 Auteur 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!
Recommended Posts
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.