RequestCode erróneo devuelto onActivityResult de otra actividad

Tengo una Activity que llama otra Activity , que llama a otras Activities . Puedo enviar a la última Activity para obtener un resultado, y luego enviar de vuelta el resultado a la primera Activity .

El flujo es algo como

 A -> B -> C -> D -> C -> B -> A 

Con el flujo de A a D se hace de startActivityForResult y el flujo de D a A se hace de onActivityResult .

De D a B el requestCode es siempre el mismo (el que decidí), pero de B a A repentinamente cambia de mi valor a un valor aleatorio (en este caso particular 196614).

Este es el código que utilizo para llamar a la activity B de la activity A :

 filterByCatalogue.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(getActivity(), CatalogueContainerActivity.class); startActivityForResult(intent, Defines.FILTER_BY_CATALOGUE); } }); 

(Con filterByCatalogue como FrameLayout )

Este es el código que utilizo para devolver la activity A :

 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == Defines.FILTER_BY_CATALOGUE) { if (resultCode == RESULT_OK) { Intent intent = new Intent(); intent.putExtra("article", data.getStringExtra("article")); setResult(RESULT_OK, intent); finish(); } } } 

He buscado mucho pero no puedo encontrar dónde me equivoco …

Solo reemplaza

 startActivityForResult(intent, Defines.FILTER_BY_CATALOGUE); 

con

 getActivity().startActivityForResult(intent, Defines.FILTER_BY_CATALOGUE); 

Funcionará seguro. 🙂

El código de solicitud no es aleatorio. Cuando se usan fragmentos de biblioteca de soporte v4, el índice de fragmentos se codifica en los 16 bits superiores del código de solicitud y el código de solicitud se encuentra en los 16 bits inferiores. El índice de fragmentos se utiliza posteriormente para encontrar el fragmento correcto para entregar el resultado. Referencia .

Por ejemplo, 196614 es realmente 3 << 16 + 6 donde 3 es el índice de fragmentos más uno y 6 es su código de solicitud.

Moral: No mezcle la actividad / fragmento startActivityForResult() y onActivityResult() . Cuando se inicia desde una actividad, procese el resultado en la actividad. Cuando se inicia desde un fragmento, procese el resultado en el fragmento.

  • OnActivityResult () no se llama
  • Cómo utilizar el método onActivityResult de otra clase que no sea Activity
  • Manejar datos de varias actividades en un onActivityResult ()?
  • OnActivityResult no se llama
  • Android reduce el tamaño del archivo para que la imagen capturada por la cámara sea inferior a 500 kb
  • Identificar en onActivityResult si se seleccionó la imagen de una galería o un video - Android
  • OnActivityResult no se llama cuando se hace clic en el botón Atrás en ActionBar
  • OnActivityResult no se llama después de startIntentSenderForResult
  • Actualización del recuento del carro al presionar el botón de retroceso después de la eliminación
  • Android: ¿Cuándo usamos getIntent ()?
  • fragmentos startActivityForResult devuelven siempre resultCode 0 y el intento null en callback onActivityResult
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.