utilizar studio start otra intent for example como aplicacion activity abrir android onactivityresult start-activity

studio - onactivityresult camera android



El código de solicitud incorrecto devolvió onActivityResult de otra actividad (2)

Tengo una Activity que llama a otra Activity , que llama a otras Activities . Envío a la última Activity para obtener un resultado y luego devuelvo el resultado a la primera Activity .

El flujo es algo así 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 cambia repentinamente 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 uso 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 encuentro dónde me equivoco ...


El código de solicitud no es aleatorio. Cuando se utilizan los fragmentos de biblioteca de soporte de v4, el índice de fragmentos se codifica en los 16 bits superiores del código de solicitud y su código de solicitud se encuentra en los 16 bits inferiores. El índice de fragmentos se usa más adelante para encontrar el fragmento correcto para entregar el resultado. Reference .

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

Moral: no mezclar actividad / fragmento startActivityForResult() y onActivityResult() . Cuando se inicia desde una actividad, procesar el resultado en la actividad. Cuando se inicia desde un fragmento, procesa el resultado en el fragmento.


Simplemente reemplazar

startActivityForResult(intent, Defines.FILTER_BY_CATALOGUE);

con

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

Funcionará seguro. :)