Estou tentando definirResult depois que o botão VOLTAR foi pressionado. Eu chamo onDestroy
Intent data = new Intent();
setResult(RESULT_OK, data)
Mas quando se trata de
onActivityResult(int requestCode, int resultCode, Intent data)
o resultCode é 0 (RESULT_CANCELED) e os dados são 'nulos'.
Então, como posso passar o resultado da atividade encerrada pelo botão VOLTAR?
Activity
o resultado deve ser definido antes definish()
ser chamado. Clicar em VOLTAR realmente ligafinish()
em seuactivity
, então você pode usar o seguinte snippet:Se você ligar
NavUtils.navigateUpFromSameTask();
noonOptionsItemSelected()
,finish()
é chamado, mas você vai ter o erradoresult code
. Então, você tem que chamarfinish()
nãonavigateUpFromSameTask
noonOptionsItemSelected()
. requestCode errado em onActivityResultfonte
finish
tem a ver comonPause
eonDestroy
? Aqueles totalmente não estão relacionados, exceto quefinish
inicia o processo de rescisão queonPause
eonDestroy
fazem parte.Se você quiser definir um costume
RESULT_CODE
noonBackPressed
evento, então você precisa primeiro conjunto aresult
e depois chamar osuper.onBackPressed()
e você receberá o mesmoRESULT_CODE
na de atividade chamadoronActivityResult
métodofonte
Refatorei meu código. Inicialmente, preparei alguns dados e configurei como
activity result
emonDestroy
(isso não funcionou). Agora eu defino osactivity
dados cada vez que os dados a serem retornados são atualizados e não há nada emonDestroy
.fonte
setResult()
, seus dados serão perdidos.Você deve substituir onOptionsItemSelected assim:
fonte
Consulte o documento onActivityResult (int, int, Intent)
A solução é verificar o resultCode para o valor Activity.RESULT_CENCELED . Se sim, isso significa que BACK foi pressionado ou a atividade travou. Espero que funcione para vocês, funcione para mim :).
fonte
onDestroy
está muito atrasado na cadeia - em vez disso, substituaonPause
eisFinishing()
verifique se sua atividade está no final de seu ciclo de vida.fonte
Tente substituir onBackPressed (do Android nível 5 para cima) ou substituir onKeyDown () e capturar KeyEvent.BUTTON_BACK (consulte os resultados de atividades do Android ). Isso funciona para mim.
fonte
Não confie em nenhuma lógica executada em onPause de uma atividade quando retornar à inicial. De acordo com a documentação:
Consulte http://goo.gl/8S2Y para obter detalhes.
A maneira mais segura é definir o resultado após a conclusão de cada operação de alteração de resultado (como você mencionou em sua resposta)
fonte
Eu colo a resposta pode ser útil para outras pessoas: quando um conjunto launcheMode com android: launchMode = "singleTask" eu também não consigo obter o resultado, o documento diz:
e:
fonte