2012-09-06 21 views
15

Como puedo enviar datos de una actividad a otra usando la siguiente:¿Cómo puedo enviar datos de regreso usando finish?

intent.putExtra("Name", Value); 

¿Cómo puedo enviar datos cuando estoy usando finish() para volver a la actividad anterior.

En mi aplicación desde Activity_A voy a Activity_B. En Activity_B estoy marcando una ubicación en el mapa, lo que me da latitud y longitud. Entonces quiero usar este lat y lng en Activity_A. Pero no quiero volver al Activity_A con una intención, porque no quiero volver a crear el Activity_A ya que algunos datos ya llenos se perderán.

+0

guardar el valor en una variable global o el uso compartido pref –

+0

tengo un problema con el uso de variables globales. si lo estoy usando así Activity_B.lat, Activity_A.lng.Cuando estoy en Activity_A, voy a Activity_B y vuelvo a Activity_A, cierro la aplicación con el botón de inicio y vuelvo a abrir después de 5 minutos, obtengo una excepción de puntero nulo ya que la Activity_B que tiene esta variable se destruye –

+0

U puede consultar este enlace. .. que ayudará u seguro ... http: //android-er.blogspot.in/2011/08/return-result-to-onactivityresult.html –

Respuesta

20

Como está utilizando intent.putExtra("Name", Value);, utilice la misma cosa mientras que el acabado de la actividad también.

Por ej .:

De activityA se llama activityB como:

intent.putExtra("Name", Value); 
now instead of startActivity() use `startActivityForResult()` 

Y desde activityB, mientras que el acabado de la actividad, lo llaman:

setResult(RESULT_OK); 

Ahora en activityA, su onActivityResult se llamará, que es como:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // TODO Auto-generated method stub 
} 

Así que de esta manera usted puede manejarlo.

+1

lo tanto, mantener intent.putExtra ("lat ", lat); y luego setResult (1, intencion); luego termina() ?? –

+0

sí, eso es correcto. – Shrikant

+0

y en onACtivityResult, data.getDoubleExtra ("lat"); –

1

uso startActivityForResult para iniciar B y B antes de setResultfinish y manejar onAcitivityResult en A

+0

muchas gracias 1 –

15

En la Actividad A:

// Add more, if you call different activities from Activity A 
private static final REQUEST_GET_MAP_LOCATION = 0; 

void doSomething() { 
    ... 
    startActivityForResult(theIntentYouUseToStartActivityB, REQUEST_GET_MAP_LOCATION); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == REQUEST_GET_MAP_LOCATION && resultCode == Activity.RESULT_OK) { 
     int latitude = data.getIntExtra("latitude", 0); 
     int longitude = data.getIntExtra("longitude", 0); 
     // do something with B's return values 
    } 
} 

En la Actividad B:

... 
setResult(Activity.RESULT_OK, 
    new Intent().putExtra("latitude", latitude).putExtra("longitude", longitude)); 
finish(); 
... 
+0

tengo un caso donde, Activity_A call Activity_B que enturn llamadas de Activity_C y finish(); ... Ahora si llamo finish() en Activity_C llego a Activity_A, pero aquí en onctiviyResult, no está ingresando el bloque if que dio eso es esperado porque de Activity_B a Activity_C solo estoy usando startActivity (intención). ¿Cómo resolver este caso? gracias –

+0

@ Archie.bpgc: Cuando llamas a Activity_C en B, ¿'setResult' antes de llamar a' finalizar'? – Heinzi

+0

No, yo no estaba usando nada, excepto Intento (Activity_B, ACtivity_C), startActivity (intent) y finish(); –

3

Llame a su Activity_B con startActivityForResult(), desde su Activity_A:

//Starting a new Intent 
Intent nextScreen = new Intent(getApplicationContext(), Activity_B.class); 
// starting new activity 
startActivityForResult(nextScreen,1000); 

Una vez que termine de trabajar en el Activity_B , llama al setResult() para s y los datos, seguido por finish() como esto

//Starting the previous Intent 
Intent previousScreen = new Intent(getApplicationContext(), Activity_A.class); 
//Sending the data to Activity_A 
previousScreen.putExtra("Bla"," Blabla"); 
setResult(1000, previousScreen); 
finish(); 

Esto le llevará de nuevo a su anterior Activity_A.

En Activity_A, anula onActivityResult().

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data)  
    { 
    super.onActivityResult(requestCode, resultCode, data); 
    String bla = data.getStringExtra("Bla");  
    } 

Encontrado here

Cuestiones relacionadas