2013-07-03 2 views
8

Szenario Arbeit: Ich habe ein MainActivity.java, OtherPageForFragments.java und ein Fragment, das auf OtherPageForFragments.javaAndroid: SetResult nicht

In MainActivity.java ist, habe ich den folgenden Code geschrieben, eine Tätigkeit zu beginnen und in

Ergebnis zu erhalten onActivityResult (int requestCode, int Resultcode, Absichtsdaten)

ist

startActivityForResult(new Intent(this, OtherPageForFragments.class),REQUEST_CODE_MAP); 

Im onDestroy() des Fragments Klasse, ich habe dies geschrieben:

public void onDestroyView() { 
     // TODO Auto-generated method stub 
     super.onDestroyView(); 
     mlocManager.removeUpdates(this); 
     Intent intent = new Intent(); 
     intent.putExtra("Latitude", passLatLng.latitude); 
     intent.putExtra("Longitude", passLatLng.longitude); 
     getActivity().setResult(Activity.RESULT_OK, intent); 
     getActivity().finish(); 
    } 

Nun möchte ich mein Ergebnis in der MainActivity Klasse. Also, ich habe den folgenden Code in der onActivityResult Methode geschrieben:

if (resultCode == Activity.RESULT_OK && requestCode == REQUEST_CODE_MAP) 
     { 
      tost("2"); 
      double lat=data.getExtras().getDouble("Latitude"); 
      double lng=data.getExtras().getDouble("Longitude"); 
      tost(lat + " -- " + lng); 
     } 

Das Problem: die resultCode zurückgegeben zu werden, ist nicht Activity.RESULT_OK und die Intent Ich erhalte ist null.

Was ist zu tun? Dank

+0

Welchen Code erhalten Sie? ActivityRessult –

+0

Sie müssen die Werte von Fragment zu Aktivität übergeben? – Raghunandan

+0

http://developer.android.com/guide/components/fragments.html. Aktivieren Sie die Option "Mit der Aktivität kommunizieren". – Raghunandan

Antwort

3

Versuchen Sie folgendes:

Intent data = new Intent(); 
intent.putExtra("Latitude", passLatLng.latitude); 
intent.putExtra("Longitude", passLatLng.longitude); 
if (getParent() == null) { 
    setResult(Activity.RESULT_OK, data); 
} else { 
    getParent().setResult(Activity.RESULT_OK, data); 
} 
getActivity().finish(); 
+0

Dadurch wird eine neue Instanz auf 'MainActivity' im Task-Stack erstellt, die nicht zum ursprünglichen Aufrufer der aktuellen Aktivität zurückkehrt. –

+0

@ micro.pravi versuche mein bearbeiten und sehen. –

+0

Hat nicht für mich funktioniert –

9
getActivity().setResult(Activity.RESULT_OK, intent); 
getActivity().finish(); 

dieser Code sollte in onDestroy nicht sein. onDestroy wird ausgeführt, nachdem die Aktivität bereits beendet wurde und onActivityResult aufgerufen wurde.

dieser Code muss in dem Code, der die Aktivität/Fragment schließt, wie auf Zurück-Taste gedrückt wird, oder eine Schaltfläche zum Schließen onClick

+0

Es ist nicht 'onDestroy'. Es ist 'onDestroyView' des Fragments und es wird aufgerufen, bevor die Aktivität beendet wird. –

4

vielleicht haben Sie den Start-Modi für beide Aktivitäten klären müssen. normalerweise sollten sie "Standard" sein, wenn es in Ihrer Aktivitätsmanifestdatei Attribute "singleTop" ... gibt. Sie müssen mehr Aufmerksamkeit schenken.

+0

In meinem Szenario muss es singleTask Startmodus sein. Gibt es eine Problemumgehung, die dieses Problem behebt, ohne den Startmodus auf Standard zu ändern? –

Verwandte Themen