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. Llamarfinish()
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()
oonResume
parte. Si crea una nueva instancia del fragmento en el que usted llamastartActivityForResult
, sería el problema. Normalmente, Android automáticamente restaurar el estado anterior al de la actividad B de la llamadafinish()
. Así que me cree otro fragmento de la instancia manualmente, que reemplazará a la que obtener la devolución de la Intención.
Código de resultado 0 es
RESULT_CANCELLED
.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).launchMode="singleTask"
pero aún así me gusta empezar una nueva actividad.Pasé algún tiempo para averiguar la razón. Mi error fue poner
super.onBackPressed()
en elonBackPress()
método.Me llama
finish()
en el método. Pero creo quesuper.onBackPressed()
va a llamar a lafinish()
automáticamente así que usted conseguirá resultCode 0 siempre.Tan sólo hay que quitar la
super.onBackPressed()
línea en elonBackPressed()
método.