Estoy tratando de establecer el resultado después de presionar el botón ATRÁS. Llamo a Destroy
Intent data = new Intent();
setResult(RESULT_OK, data)
Pero cuando se trata de
onActivityResult(int requestCode, int resultCode, Intent data)
el resultCode es 0 (RESULT_CANCELED) y los datos son 'nulos'.
Entonces, ¿cómo puedo pasar el resultado de la actividad terminada por el botón ATRÁS?
Activity
El resultado debe establecerse antes de quefinish()
se llame. Al hacer clic en ATRÁS, en realidad se llamafinish()
a suactivity
, por lo que puede usar el siguiente fragmento:Si llama
NavUtils.navigateUpFromSameTask();
enonOptionsItemSelected()
,finish()
que se llama, pero obtendrá el malresult code
. Así que hay que llamarfinish()
, nonavigateUpFromSameTask
enonOptionsItemSelected()
. requestCode incorrecto en onActivityResultfuente
finish
tiene que ver cononPause
yonDestroy
? Aquellos totalmente de que no están relacionados a excepción de quefinish
se inicia el proceso de terminación queonPause
yonDestroy
son parte de.Si desea establecer alguna costumbre
RESULT_CODE
en elonBackPressed
caso entonces usted necesita para el primer setresult
y luego llamar alsuper.onBackPressed()
y recibirá el mismoRESULT_CODE
en la actividad de la persona que llamaonActivityResult
métodofuente
Refactoré mi código. Inicialmente preparé algunos datos y los configuré como
activity result
enonDestroy
(esto no funcionó). Ahora configuroactivity
datos cada vez que se actualizan los datos que se devolverán y no tengo nada enonDestroy
.fuente
setResult()
, sus datos se perderán.Debe anular onOptionsItemSelected así:
fuente
Consulte el documento de onActivityResult (int, int, Intent)
La solución es verificar el valor de resultCode Activity.RESULT_CENCELED . Si es así, significa que se presionó ATRÁS o la actividad se bloqueó. Espero que les funcione a ustedes, a mí me funciona :).
fuente
onDestroy
es demasiado tarde en la cadena; en su lugar, anuleonPause
yisFinishing()
verifique si su actividad está al final de su ciclo de vida.fuente
Intente anular onBackPressed (desde el nivel 5 de Android en adelante), o anule onKeyDown () y capture KeyEvent.BUTTON_BACK (consulte Resultados de la actividad de Android ). Esto me funciona.
fuente
No confíe en ninguna lógica ejecutada en onPause de una actividad cuando regrese a la inicial. Según los documentos:
Consulte http://goo.gl/8S2Y para obtener más detalles.
La forma más segura es establecer el resultado después de que se complete cada operación de modificación de resultados (como menciona en su respuesta)
fuente
pego la respuesta puede ser útil para otras personas: cuando un launcheMode configurado con android: launchMode = "singleTask" tampoco puedo obtener el resultado, el documento dice:
y:
fuente