He buscado por todas partes y hay puestos similares acerca de ella, pero no puede encontrar una solución!

Mi situación es que tengo una Actividad que tiene un fragment, y de que fragment quiero empezar una nueva Activity B que debe devolver algunos de los valores de la fragment.

Sobre la fragment

startActivityForResult(mapIntent, ConstantsUtils.TOMAP_REQUEST_CODE);

Sobre la Activity B, para devolver los datos

Intent returnIntent = new Intent();
returnIntent.putExtra(SerializationConstants.isSearchSaved, mAbItemsShown.ordinal());
setResult (ConstantsUtils.SUCCESS_RETURN_CODE, returnIntent);
finish();

Sobre el fragmento

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

switch (requestCode) {

    case ConstantsUtils.TOMAP_REQUEST_CODE:

            if (resultCode == ConstantsUtils.SUCCESS_RETURN_CODE) {
              //do some stuff 
            }
    }
}

onActivityResult de la fragment es llamado correctamente, con el derecho requestCode pero resultCode siempre es 0 y la intención es siempre null.

No tengo otro onActivityResult aplicación en el marco de Activity A.

De hecho, yo también trato de iniciar el activity de la fragment con
getActivity().startActivityForResult(mapIntent, ConstantsUtils.TOMAP_REQUEST_CODE);
y la aplicación de onActivityResult en Activity Un pero sucede lo mismo, a la derecha requestCode pero mal resultCode y intent.

Estoy usando Sherlock Action Bar así que mi fragment es un SherlockListFragment así que estoy usando el support library (r18).

Me pueden ayudar? Gracias

  • No sé lo que su super.onActivityResult(requestCode, resultCode, intent); para. No es necesario, en mi opinión. También, su request_code necesitan ser >= 0, como se menciona [aquí][doc][doc]: developer.android.com/reference/android/app/…, int)
  • super no es necesaria, sólo estaba tratando de ver si el problema era debido a ella, pero con el mismo resultado si yo no lo ponen. La constante SUCCESS_RETURN_CODE tiene un valor de 1, pero lo mismo sucede con la Actividad.RESULT_OK
  • Se parece a la que está llamando finish() en algún otro lugar ActivityB. Llamar finish() sin establecer el código de resultado y los datos del resultado el resultado sería exactamente el comportamiento que usted está describiendo. O eso, o ActivityB se estrellan, que haría la misma cosa.
  • Entonces tengo que aconsejar a la verificación de la Actividad, en onStart() o onResume parte. Si crea una nueva instancia del fragmento en el que usted llama startActivityForResult, sería el problema. Normalmente, Android automáticamente restaurar el estado anterior al de la actividad B de la llamada finish(). Así que me cree otro fragmento de la instancia manualmente, que reemplazará a la que obtener la devolución de la Intención.
InformationsquelleAutor nirvik | 2013-08-29

2 Comentarios

  1. 11

    Código de resultado 0 es RESULT_CANCELLED.

    The resultCode will be RESULT_CANCELED if the activity explicitly returned that, didn't return any result, or crashed during its operation.

    También la razón común de obtener este código es el lanzamiento de una actividad en una nueva tarea (revise su intención y manifiesto de banderas, lo que llevó al inicio de una nueva tarea).

    También si usted tiene un padre de la actividad, debe establecer el código de resultado de que en lugar de establecer el código de resultado de su niño (intentar getParent y si no es null, que establece el código de resultado de la misma).

    • He comprobado y no tengo ninguna marca especial en el manifiesto o cuando la creación de la intención. Y el valor de getParent dentro de la ActivityB (el que se hace la setResult) es nulo
    • Impresionante, gracias. Para mí el problema era que yo había launchMode=»singleTask» en mi manifiesto.
    • puede usted por favor me explique cómo se resuelve el problema? Necesito tener launchMode="singleTask" pero aún así me gusta empezar una nueva actividad.
    • el singleTask modo del lanzamiento es sólo independiente de las actividades.
  2. 5

    Pasé algún tiempo para averiguar la razón. Mi error fue poner super.onBackPressed() en el onBackPress() método.

    Me llama finish() en el método. Pero creo que super.onBackPressed() va a llamar a la finish() automáticamente así que usted conseguirá resultCode 0 siempre.
    Tan sólo hay que quitar la super.onBackPressed() línea en el onBackPressed() método.

    • Yo tenía el mismo problema, y este comentario seguro de mí! gracias 🙂

Dejar respuesta

Please enter your comment!
Please enter your name here