2012-07-31 7 views

Antwort

7

Sie können eine statische Variable in einer anderen Aktivität oder eine globale Variable in der Application-Klasse deklarieren und dann auf jede Aktivität, wie Sie ein Objekt des Typs NewType analysieren möchten, von OldActivity auf Class NewActivity zugreifen. Gehen Sie wie folgt vor:

Deklarieren Sie ein Objekt des statischen NewType in NewActivity.java.

public static NewObject newObject=null; 

tun Folgen Sie, wenn Sie NewActivity aufrufen.

NewActivity.newObject=item; 
Intent intent=new Intent(OldActivity.this, NewActivity.class); 
startActivity(intent); 
+0

Hallo, ich möchte die Aktivität lieber nicht auf eine statische Variable/das Anwendungsobjekt ausweiten. – kietdlam

+0

Wenn Sie ein Objekt durch Intent übergeben möchten, können Sie Bundle verwenden, aber um einen Wert im Bundle zu setzen, sollte es ein parzellierbares Objekt sein. Wenn dies nicht der Fall ist, müssen Sie eine andere Methode verwenden, um das Objekt zu übergeben Da der Android ActivityManager selbst den Konstruktor der Aktivität you aufruft, kann der Parameter im Konstruktor nicht übergeben werden. Ich glaube nicht, dass es anders geht. – jeet

+0

Dies war nicht die Antwort, nach der ich suchte, aber es scheint, als ob es daran liegt, dass das Framework das von mir gesuchte Verhalten nicht unterstützt. Vielen Dank! – kietdlam

1

Sie können es in eine der folgenden Möglichkeiten:

  • Machen Sie das Objekt Static. (am einfachsten aber nicht immer effizient)
  • Serialisieren -> senden -> empfangen -> deserialisieren. Sie können auch etwas wie JSON decoding and encoding verwenden, wenn Ihre Klasse nicht serialisierbar ist. (Erfordert eine Menge über Kopf, Sie nicht wollen, dies verwenden, es sei denn, Sie haben einen guten Grund)
  • Parcel (sehr effizient, Fasten)

Hier sind ein Beispiel aus der Dokumentation: Sie können wickeln Sie Ihre Objekt mit einer parcelable, hängen Sie es an eine Absicht, und 'wickeln Sie es in der Empfangsaktivität.

public class MyParcelable implements Parcelable { 
    private int mData; 

    public int describeContents() { 
     return 0; 
    } 

    public void writeToParcel(Parcel out, int flags) { 
     out.writeInt(mData); 
    } 

    public static final Parcelable.Creator<MyParcelable> CREATOR 
      = new Parcelable.Creator<MyParcelable>() { 
     public MyParcelable createFromParcel(Parcel in) { 
      return new MyParcelable(in); 
     } 

     public MyParcelable[] newArray(int size) { 
      return new MyParcelable[size]; 
     } 
    }; 

    private MyParcelable(Parcel in) { 
     mData = in.readInt(); 
    } 
} 
-1

Einer der Lösung:

Sie können eine Singleton-Klasse machen die Informationen, die Sie

wollen

zum Beispiel zu tragen:

StorageManager.getInstance().saveSomething(Object obj); 

dann mit entsprechender Getter-Methode abrufen zurück

Stellen Sie sicher, dass Sie sich um die Synchronisierungsprobleme kümmern;)

Verwandte Themen