eigenen Datentyp an einen Intent übergeben

hallo,

sorry, wenn ich jetzt noch mal nachfrage, bin noch nicht mit android per du, aber passiert denn mit "parcelable" nicht das gleiche?

einen service brauche ich doch nur wenn ich mehrere programme mit den gleichen daten füttern möchte. aber wenn jetzt die activity a die activity b aufruft und b ohne a nicht existieren kann. wozu dann einen service?

mit parcelable reiche ich doch die daten einfach nur weiter, wie z.b. in einer windows anwendung: Dialog dlg = new MeinDialog( MeineDaten d)

im moment finde ich einen service dafür zu verwenden ein bisschen zu dick aufgetragen... oder?
 
Habe das selbe Problem, dass ich aus meiner übergebenen ArrayList in der empfangenen Activity nicht die Werte auslesen kann. Habe die ArrayList auch global und static gemacht. Meine eigene Objekt-Klasse implementiert, wie fugu2.0 beschrieben hat, Parcelable.

Kann mal jemand ein Beispiel zeigen bei wem es funktioniert das Werte auslesen???
 
Ich stelle mal folgende Behauptungen auf:

- Ein View-Objekt (Und Button ist von View abgeleitet) sollte unmittelbar in der Activity, die es anzeigen möchte erzeugt werden. Der Grund ist, dass in View-Konstruktoren immer der Context in dem die View erzeugt wird erwartet wird. Wenn man also eine View in der einen Activity erzeugt und in der anderen verwendet ist nicht unbedingt gegeben, dass der Context der selbe ist.

- Also sollte man die Daten, die zum Erzeugen der Views notwendig sind übergeben, anstatt die View selbst.

- Es macht keinen Sinn Klassen, die das Parcable-Interface nicht implementieren, abzuleiten und dann Parcelable zu implementieren, da man ja nicht weiß was alles zum verschicken serialisiert werden muss.

- Services dienen nicht dazu Daten zwischen Activities zu transferieren. Sie sind dazu gedacht einen andauernden Prozess auszuführen, der mit dem User kommuniziert (falls nicht würde ein Thread reichen). Als altbekanntes Beispiel führe ich mal das Musik abspielen auf. Ein zweiter Grund für Services wäre ein lange dauernder Prozess, der nichts mit der Activity zutun hat, aber auf jeden Fall zuende ausgeführt werden soll. Beispielsweise das Schreiben großer Datenmengen in eine Datenbank.

Jetzt können wir über meine Behauptungen diskutieren ;-)
 
Irgendwie muss man ja aber Daten zentral speichern können, sodass jede Activity darauf zugreifen kann. Dasselbe mit Methoden die beispielsweise von mehreren Activitys genutzt werden sollen. Wie wird sowas realisiert?

@BenOtto - Kannst du mir sagen wie ich eine ArrayListe mit einem eigenen Objekt einer Activity übergeben kann?
 
Also... das kommt meiner Meinung nach auf die Art der Daten an.

Ein paar gängige Beispiele:
- Um einfache Anwendungseinstellungen zu speichern (Hintergrundfarbe der View o.Ä.) würde ich SharedPreferences benutzen (entweder per Name pro Activity oder Default für Anwendungsweite Einstellungen)
- Bei komplexeren Einstellungen würde ich entweder eine Datenbank, oder eine extra Einstellungsklasse entwerfen, die Serializable implementiert und ein Objekt dieser beim Start der Anwendung (nicht Activity) lesen und beim Beenden schreiben.
- Bei Daten, die sich in einer Datenbank befinden eine URI (wie bspw. im Notepad Tutorial) im Intent übergeben.
- Bei nicht primitiven Daten, die von einer zu einer anderen Activity transferiert werden sollen (was glaube ich deinem Fall entspricht) würde ich ein Array aus Parcelables benutzen. Siehe putParcelableArrayListExtra()

In der Dokumentation von Parcelable ist gut beschrieben, wie man dieses Interface zu implementieren hat.
 
Wenn es um Activities innerhalb ein und derselben Applikation geht, kann man auch etwas ganz anderes machen:

Anstatt über die Intents zu gehen, kann man von der Klasse Application ableiten und seine Daten dort in Instanzvariablen speichern.
Dort kommt man über ((MyApp)getApplication()) heran.

Diese Applikationsklasse gibt man dann im Manifest im Attribut android:name=".MyApp" an.
 
Auch das ist eine Möglichkeit. Allerdings ähnelt das ja globalen Variablen. Und diese "sind ja sowieso böse" und verringern die Wiederverwendbarkeit einer Activity.

Aber wenn man es denn tut, dann am besten per HashMap<long, WeakReference<Klasse>> und übergabe des long Werts im Intent. Das sorgt dafür, dass nicht ungewollt Objekte überleben usw. Als long nimmt man am besten den aktuellen Timestamp per SystemClock o.Ä.
 

Ähnliche Themen

FabianDev
Antworten
5
Aufrufe
548
swa00
swa00
R
  • RudolfHagen
Antworten
1
Aufrufe
648
koje71
koje71
M
Antworten
8
Aufrufe
952
deek
D
Zurück
Oben Unten