Tengo 3 clases en mi ejemplo: Clase A, la actividad principal. La clase A llama a startActivityForResult:
Intent intent = new Intent(this, ClassB.class);
startActivityForResult(intent, "STRING");
Clase B, esta clase es una TabActivity:
Intent intent = new Intent(this, ClassC.class);
tabHost.addTab...
Clase C, esta clase es una actividad regular:
Intent intent = this.getIntent();
intent.putExtra("SOMETHING", "EXTRAS");
this.setResult(RESULT_OK, intent);
finish();
onActivityResult se llama en la Clase A, pero resultCode es en RESULT_CANCELED
lugar de RESULT_OK
y el intento devuelto es nulo. ¿Cómo devuelvo algo de la actividad dentro de un TabHost?
Me doy cuenta de que el problema es que mi Clase C realmente se está ejecutando dentro de la Clase B, y la Clase B es lo que está regresando RESULT_CANCELED
a la Clase A. Todavía no conozco una solución alternativa.
fuente
http://tylenoly.wordpress.com/2010/10/27/how-to-finish-activity-with-results/
Con una ligera modificación para "param_result"
fuente
setResult
era lo principal. Póngalo en algo, o en un valor, por ejemplo,RESULT_OK
y listo;setResult(RESULT_OK);
. Me ayudó, +1Intención.FLAG_ACTIVITY_FORWARD_RESULT?
fuente
También podría implementar un onActivityResult en la Clase B e iniciar la Clase C con startActivityForResult. Una vez que obtenga el resultado en la Clase B, configure el resultado allí (para la Clase A) en función del resultado de la Clase C. No lo he probado, pero creo que debería funcionar.
Otra cosa a tener en cuenta es que la actividad A no debe ser una actividad de una sola entrada. Para que startActivityForResult funcione, su Clase B debe ser una actividad secundaria de la Actividad A y eso no es posible en una actividad de instancia única, la nueva Actividad (Clase B) comienza en una nueva tarea.
fuente
Para iniciar la Actividad 2 desde la Actividad 1 y obtener el resultado, puede usar startActivityForResult e implementar onActivityResult en la Actividad 1 y usar setResult en la Actividad2.
fuente