2009-12-31 15 views
18

Estoy frente con un startActivityForResult problema relacionado()onActivityResult no funciona?

Para iniciar SecondActivity de FirstActivity:

Intent intent = new Intent(); 
intent.setClass(FirstActivity.this, SecondActivity.class); 
intent.putExtra("key1", "12345"); 
startActivityForResult(intent, 0); 

y maneja resultado:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    //TODO handle here. 
} 

Para enviar el mensaje de SecondActivity a FirstActivity:

en SecondActivity:

setResult(0); 

No puedo controlar el resultado de onActivityResult en FirstActivity. Nunca funciona para mi aplicación.

Mi sistema operativo es: 1,5

Qué está mal aquí?

+0

lo que sucede cuando termine la segunda actividad? ¿Es la onActivityResult método de devolución de llamada() se invoca? – Samuh

+0

Gracias por respose, yo estoy tratando de hacer que se mantiene segunda actividad y la primera actividad se terminaron. ¿es posible? – AndroiDBeginner

Respuesta

30

startActivityForResult está destinado a ser utilizado para situaciones en las que desee seleccionar un fragmento de datos, o llevar a cabo algún tipo de acción que su aplicación Activity o no puede hacer.

Por ejemplo, desea elegir un contacto, por lo que inicia la aplicación de contactos, el usuario elige la persona que desea y obtiene el resultado. O si desea tomar una foto, inicie la aplicación de la cámara y solicite que le envíe la foto una vez que haya finalizado. Esta acción está completamente separada de su primera actividad que llama al startActivityForResult.

El Activity que está iniciando no le enviará el resultado hasta que se haya completado Activity, es decir, finish() ha sido llamado.

Así, en su caso, tiene que informar de esto SecondActivity:

setResult(...); 
finish(); 

antes FirstActivity recibirá el resultado en su método onActivityResult. Por supuesto, esto significa que SecondActivity ahora se ha ido y FirstActivity es la parte superior de la pila de nuevo.


No es posible enviar el resultado a FirstActivity luego cerrarlo, manteniendo SecondActivity todavía activo. En este caso, debe manejar lo que sea que este "resultado" esté en SecondActivity, o enviarlo a un Service que defina para realizar el procesamiento que desee.

+0

bien. Gracias por la explicación completa. Entiendo. – AndroiDBeginner

+0

Tuve algunos problemas con mis códigos ... el onActivityResult no se invocaba ... por fin descubrí que estaba usando startActivity (newIntent); en lugar de setResult (resultCode, intencion); ... gracias por esta publicación .. – rahul

5

Su código parece correcto, pero ¿detiene su segunda actividad?

Pruebe esto en él:

setResult(0); 
finish(); 
+0

Gracias por respose, yo estoy tratando de hacer que se mantiene segunda actividad y la primera actividad sería terminado. ¿es posible? – AndroiDBeginner

+0

No estoy seguro de entender ... lo siento por – tbruyelle

+0

. mi mala Inglés estoy tratando de hacer lo siguiente:. cuando setResult (MY_RESULT) a FirstActivity, puedo manejarlo en onActivityResult Th en finish FirstActivity. como FirstActivity.this.finish(); ¿Cómo hacerlo? – AndroiDBeginner

17

Estaba atrapado aquí por un tiempo. Agregando mi problema aquí para asegurarme de que no te rasques la cabeza también.

El segundo parámetro de esta función tiene que ser 0 o más.

startActivityForResult(intent, 0); // <- this is OK 

yo estaba sentado el segundo parámetro a RESULT_OK, que es -1, y mi devolución de llamada onActivityResult nunca fue recibiendo llamadas. Entonces, si te quedas atascado como yo, también puedes verificar si tu segundo parámetro es correcto.

startActivityForResult(intent, RESULT_OK); // <- this is wrong 

La línea anterior no podrá invocar aActivityResult.

+0

este trabajo para mí. – roseliux

+0

La respuesta aceptada es buena pero ESTO es mejor, gracias –

7

También estaba atascado en el mismo problema, pero debido a una razón diferente como matangs. Al parecer startActivityForResult sólo funciona si tiene android:launchMode conjunto de standard para la actividad principal (en el manifiesto). Espero que ayude a alguien.

+0

¡Gracias! ¡Eliminar el modo de lanzamiento resolvió el problema para mí! – inversus

+0

Al eliminar launchmode de la actividad también se solucionó mi problema ... Gracias – TrueCoke

+0

muchas gracias .... wow it's works ... –

1

Si usted está haciendo acciones en onPause (como desatar un servicio) tratan de comentar y ver si onActivityResult se llama (me tirado unas buenas horas en este ..)

0

Gracias a @johndodo (a ese punto el más abundante) - Encuentro mi solución para el mismo problema.

eliminación android:noHistory=true en el Manifiesto" resolvieron este problema para mí.

Cuestiones relacionadas