2010-06-20 5 views
1

Je suis très nouveau sur Android, donc j'expérimente avec le code du tutoriel. En particulier, le bloc-notes.Passer la référence à une autre activité - Android

Si vous regardez ici: http://developer.android.com/resources/tutorials/notepad/notepad-ex2.html, à Étape 5 ils mettent des valeurs afin qu'il puisse être utilisé par NoteEdit.

Je voudrais passer une référence de NotesDbAdapter dans NoteEdit afin que je puisse réellement faire des choses entièrement différentes.

Cela ne semble pas appeler un constructeur. J'ai essayé d'ajouter un paramètre à NoteEdit onCreate, mais cela ne semble pas aimer ça? :-(

je plus hâte d'entendre vos réponses, les experts! :-D

+1

Pourquoi voudriez-vous faire cela? En fait, c'est découragé et difficile à réaliser. – Cristian

Répondre

3

Put/Get extras ne sont pas passés par les constructeurs, vous devez lire explicitement de l'intention, sans doute dans la méthode onCreate

Première activité

Intent myIntent = new Intent(); 
myIntent.putExtra("key", "value"); 
startActivity(myIntent); 

Nouvelle activité

Code

dans onCreate

Intent myIntent = getIntent(); 
myIntent.getExtra("key"); 

Si vous voulez passer des classes personnalisées, votre classe doit implémenter sérialisable et vous ensuite lu par:

Bundle e = getIntent().getExtras(); 
Object obj=(Object) e.getSerializable("key"); 
+0

Ma classe "personnalisée" devrait-elle être implémentable sérialisable? – Gibbon

+0

Serait-il préférable de travailler dans la base de données dans la première activité et transmettre cela avec l'intention. Il faudrait avoir deux détails. Mes valeurs de base de données est comme ceci: « animal », « chat » « animal », « chien » « nourriture », « pomme de terre » – Gibbon

+0

Créer une classe réduite qui stocke les champs que vous souhaitez passer, classe de type un peu ENUM . Cette classe implémentera sérialisable. Ensuite, vous placez les données dans cette classe, quel que soit le niveau d'activité ou de modèle souhaité. Vous pouvez le passer à une autre activité avec l'intention, et vous lirez les données comme vous le souhaitez. Restez simple si vous devez passer 5 champs, vous créez une classe ayant 5 membres pour stocker les données. Ou encore plus simple, vous pouvez utiliser les extras pour éviter cette étape.Je ne sais pas à quel point votre résultat est compliqué. – Pentium10

2

Je suis d'accord avec M. Castiblanco. N'essaie pas de faire ça.

Votre Adapter contient une référence au Activity principal, celui avec le ListView que le Adapter est attaché. Si vous deviez obtenir votre Adapter sur le nouveau Activity, alors votre nouveau Activity contiendra une référence à votre ancien Activity. Cela empêchera Android d'être en mesure de détruire votre ancien Activity pour libérer de la mémoire pour d'autres applications, puisque votre nouveau Activity contiendra une référence, empêchant la récupération de place.

Si vous devez partager un modèle de données entre des activités, maintenez ce modèle de données en dehors de ces activités (par exemple, base de données, Service, Application). Votre Adapter n'est pas votre modèle de données.

+0

Alors, je redéclarer la classe de base de données et la connexion dans mon Modifier classe? – Gibbon

+0

OU, comme je l'ai dit dans un autre commentaire. Une sorte de carte de tableau qui est passée dans les extras? – Gibbon

+0

"Je devrais redéclarer la classe de base de données et la connexion dans ma classe Edit?" C'est une approche. "Une sorte de carte de tableau qui est passée dans les extras?" Comme je l'ai écrit, si vous devez partager un modèle de données entre les activités, maintenez ce modèle de données en dehors de ces activités (par exemple, base de données, Service, Application). Passer l'ensemble de votre modèle de données entre activités par extras n'est pas une approche que je recommanderais. – CommonsWare

Questions connexes