2013-03-10 1 views
6

Ich rufe activityB von activityA an und übergebe ein Klassenobjekt mit intent.Android - So senden Sie Daten zurück an die aufrufende Aktivität

Intent intentB = new Intent(v.getContext(), activityB.class); 
intentB.putExtra("data", data); //data is a class object 
startActivity(intentB); 

Die activityB beginnt gut und auch ich kann Daten extrahieren. In activityB modifiziere ich das Datenobjekt. Ich möchte dieses geänderte Datenobjekt zurück an activityA senden, wenn activityB.onDestroy() aufgerufen wird.

Irgendwelche Ratschläge?

Hier ist mein Code:

ACTIVITYA, ab der Intent:

Intent i = new Intent(this, activityB.class); 
i.putExtra("object", Class.object); 
startActivityForResult(i, 1); 

ACTIVITYA, fangen die Absicht:

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == 1) {  
     object = data.getParcelableExtra("object"); //the Class implements Parcelable 
    } 
} 

ACTIVITYB

protected void onDestroy() { 
    Intent data = new Intent(); 
    setResult(RESULT_OK, data) 
    finish(); // ends current activity 
} 
+0

ich ehrlich denke, du bist besser, nur eine Schnittstelle haben - es ist sehr einfach https://developer.android.com/ training/basics/fragments/communication.html – Fattie

Antwort

9

Nutzen Sie das ActivityResult.

  1. Verwenden startActivityForResult(int, Intent)
  2. Um Informationen in Aktivität B festzulegen, verwenden setResult(RESULT_OK, data) (wo Daten eine Intent)
  3. Aufschalten onActivityResult(int, int, Intent) und fangen die data -Intent

Aktivität A, Starten der Intent :

Intent i = new Intent(this, SecondActivity.class); 
startActivityForResult(i, 1); 

Aktivität A, die Daten zu kontrollieren:

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

    if (requestCode == 1) {  
     // make use of "data" = profit 
    } 
} 

Aktivität B:

Intent data = new Intent(); 
setResult(RESULT_OK, data) 
finish(); // ends current activity 
+0

Wo soll ich den Data Intent in activityB setzen? Ich habe versucht, es in 'activityB.onDestroy()' zu setzen, aber Intent-Daten in 'activityA.onActivityResult()' ist null – anirus

+0

@anirus sollte es funktionieren in 'onDestroy()'. – poitroae

+0

Ich bekomme immer noch 'NullPointerException'. Das ist mein Code. – anirus

Verwandte Themen