2011-03-14 24 views
15

Hasta ahora, utilicé la función startActivity con éxito y ahora que necesito usar StartActivityResult, tengo un problema.onActivityResult nunca se llamó

Al utilizar esta función, la actividad que espero que se inicie se inicia correctamente, pero parece que nunca se llama a la función onActivityResult.

Aquí está mi código en la actividad FriendPicker, a lauch la actividad MoodPicker:

Intent intent = new Intent(FriendPicker.this, MoodPicker.class); 
startActivityForResult(intent, 2); 

Y aquí es mi código en la actividad MoodPicker:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent intent) 
{     
    super.onActivityResult(requestCode, resultCode, intent); 

    Log.i("in OnActivityResult", "Activity Result");       

    switch (requestCode) 
    { 
     case 2:    
      Log.i("in OnActivityResult", "Activity Resut 2");     

      break; 
    } 
} 

y nada en mi archivo de registro que está escrito (Por supuesto, compruebe que mi archivo de registro funcionaba correctamente y comprobé con una salida de vista de texto).

¿Hay algo que olvidé declarar en el archivo Manifest?

Gracias de antemano.

Respuesta

10

¿Agregó la llamada setResult() en su clase MoodPicker?

+0

OK matan, ahora lo tengo. ¡Gracias! – thomaus

+11

Agregue su solución para que otros usuarios que lean esta publicación puedan encontrar ayuda útil. –

6

Si leo este derecho, todo el código al que se hace referencia debe estar en "FriendPicker". En "MoodPicker" se necesita un código como el que establece el resultado y termina en sí:

this.setResult(SUCCESS_RETURN_CODE, i); 
this.finish(); 

Déjame saber si esto ayuda ...

+0

¿Quiere decir que todo el código que escribí debería estar en la actividad de FriendPicker? Porque si es así, hay algo que no entiendo en el proceso startActivityForResult. – thomaus

+0

Intenté poner la función onActivityResult en mi clase FriendPicker y también lo logré. No lo entiendo ... – thomaus

+3

onActivityResult() debe colocarse en la Actividad donde llamaste startActivityForResult() –

3

actividad FriendPicker

Intent intent = new Intent(FriendPicker.this, MoodPicker.class); 
startActivityForResult(intent, 2); 


@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent intent) 
{     
    super.onActivityResult(requestCode, resultCode, intent); 

    Log.i("in OnActivityResult", "Activity Result");       

    switch (requestCode) 
    { 
     case 2:    
      if (resultCode == Activity.RESULT_OK) {  //optional 
      Log.i("in OnActivityResult", "Activity Resut 2");     
       } 
      break; 
    } 
} 

MoodPicker clase

Intent intent = new Intent(MoodPicker.this, FriendPicker.class); 
     setResult(Activity.RESULT_OK, intent); 
finish(); 

Tuve el mismo problema al usar onActivityResult(); porque no entendí cómo se aplicará correctamente, aquí puede encontrar una buena explicación sobre cómo usar onActivityResult onActivityResult doesn't work?

5

Hay un error en la API de Android. En startActivityForResult (intención, requestCode); Este funktion funciona siempre que requestCode = 0. Sin embargo, si cambia el código de solicitud a cualquier cosa que no sea cero, el ApiDemos fallará (y OnActivityResult no se llamará). encontrar aquí:

[EDIT: Enlace eliminado como grupo de Google invadido de spam]

+2

En realidad funcionará con cualquier requestCode> = 0. Cualquier cosa negativa, sin embargo, no lo hace. – whitebrow

+0

GRACIAS! por error, estaba enviando un -1 y la instrucción funciona (creo que abre la Actividad) pero luego no recibe datos, por lo que debe agregar un código> = 0 –

28

que tenía el mismo problema y lo resolvió: Basta con retirar

android:launchMode="singleInstance" 
+0

. Es difícil de adivinar, cuánto tiempo tomó. .. –

+0

Este problema me estaba volviendo loco, bien visto – German

+0

Sólo perdí unas pocas horas en esto. Salvavidas aquí mismo. – Maurizio

17

En mi caso, no lo hice me doy cuenta de que estaba llamando al startActivityForResult de una actividad que tenía el atributo android:noHistory establecido en verdadero en el manifiesto. Por lo tanto, nunca se llamó al onActivityResult ya que no había ninguna instancia de actividad.

+4

Estuve atascado con este problema durante horas. Entonces vi tu respuesta y me di cuenta de que había cometido el mismo error. Gracias por esta respuesta! –

+0

SÍ. Muchas gracias. –

5
android:noHistory="true" 

como

android:launchMode="singleInstance" 

dejará de recibir onActivityResult resultado.

+0

android: launchMode = "singleTask" plantea el mismo problema. – geecko

0

El error que había cometido era que después de la creación de mi intención que estaba llamando startActivity() en lugar de startActivityForResult()

A veces los simples que :)

Cuestiones relacionadas