932 Stimmen

Wie sendet man ein Objekt von einer Android-Aktivität zu einer anderen mit Intents?

Wie kann ich ein Objekt eines benutzerdefinierten Typs von einem Tätigkeit zu einem anderen unter Verwendung der putExtra() Methode der Klasse Absicht ?

0 Stimmen

@UMMA - Sie brauchen Ihre Fragen nicht ständig als "Community Wiki" zu markieren. Schauen Sie hier nach: meta.stackexchange.com/questions/11740/

1 Stimmen

@Paresh: Der von Ihnen angegebene Link ist defekt. Könnten Sie bitte eine Alternative angeben?

0 Stimmen

3voto

Manas Ranjan Punkte 171
Intent i = new Intent();
i.putExtra("name_of_extra", myParcelableObject);
startACtivity(i);

3voto

Arpit Patel Punkte 9027

Erste Umsetzung Paketversandfähig in Ihrer Klasse. Dann übergeben Sie das Objekt wie folgt.

SendActivity.java

ObjectA obj = new ObjectA();

// Set values etc.

Intent i = new Intent(this, MyActivity.class);
i.putExtra("com.package.ObjectA", obj);

startActivity(i);

ReceiveActivity.java

Bundle b = getIntent().getExtras();
ObjectA obj = b.getParcelable("com.package.ObjectA");

Die Paketzeichenkette ist nicht erforderlich, die Zeichenkette muss nur in beiden Aktivitäten identisch sein.

REFERENZ

3voto

DroidNinja Punkte 887

Starten Sie eine andere Aktivität aus dieser Aktivität heraus, indem Sie Parameter über das Bundle-Objekt übergeben.

Intent intent = new Intent(getBaseContext(), YourActivity.class);
intent.putExtra("USER_NAME", "xyz@gmail.com");
startActivity(intent);

Abrufen bei einer anderen Aktivität (YourActivity)

String s = getIntent().getStringExtra("USER_NAME");

Dies ist für einfache Datentypen in Ordnung. Aber wenn Sie komplexe Daten zwischen den Aktivitäten weitergeben möchten, müssen Sie sie zuerst serialisieren.

Hier haben wir das Mitarbeitermodell

class Employee{
    private String empId;
    private int age;
    print Double salary;

    getters...
    setters...
}

Sie können die von Google bereitgestellte Gson Lib verwenden, um die komplexen Daten zu serialisieren wie diese

String strEmp = new Gson().toJson(emp);
Intent intent = new Intent(getBaseContext(), YourActivity.class);
intent.putExtra("EMP", strEmp);
startActivity(intent);

Bundle bundle = getIntent().getExtras();
    String empStr = bundle.getString("EMP");
            Gson gson = new Gson();
            Type type = new TypeToken<Employee>() {
            }.getType();
            Employee selectedEmp = gson.fromJson(empStr, type);

3voto

Naveen Punkte 340

In Koltin

Fügen Sie die Kotlin-Erweiterung in Ihre build.gradle ein.

apply plugin: 'kotlin-android-extensions'

android {
    androidExtensions {
        experimental = true
   }
}

Erstellen Sie dann Ihre Datenklasse wie folgt.

@Parcelize
data class Sample(val id: Int, val name: String) : Parcelable

Objekt mit Intent übergeben

val sample = Sample(1,"naveen")

val intent = Intent(context, YourActivity::class.java)
    intent.putExtra("id", sample)
    startActivity(intent)

Objekt mit Absicht erhalten

val sample = intent.getParcelableExtra("id")

0 Stimmen

Ist sie noch experimentell?

1voto

jinais Punkte 33

Wenn Sie die putExtra-Funktion nicht unbedingt benötigen und einfach nur eine andere Aktivität mit Objekten starten wollen, können Sie sich den GNLauncher ( https://github.com/noxiouswinter/gnlib_android/wiki#gnlauncher ), die ich in dem Versuch geschrieben habe, diesen Prozess zu vereinfachen.

GNLauncher macht das Senden von Objekten/Daten an eine Aktivität von einer anderen Aktivität usw. so einfach wie der Aufruf einer Funktion in der Aktivität mit den erforderlichen Daten als Parameter. Es führt Typsicherheit ein und beseitigt alle Probleme der Serialisierung, des Anhängens an den Intent mit String-Schlüsseln und des Rückgängigmachens desselben am anderen Ende.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X