Aller au contenu

Passer un objet à une nouvelle Activity


com.hero

Recommended Posts

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

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

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

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

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

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...