5
respostas

Retornar na pilha passando um extra

Queria saber qual a melhor forma de se retornar um extra na seguinte situação:

Imagine que tenho as activitys A, B e C. A activity A é uma lista com as compras que já fiz no app, quando clico no botão "nova compra" abre a activity B onde poderei adicionar os livros que irei comprar, e clicando no botão salvar abre a activity C onde irei finalizar a compra (colocando informações como cartão e parcelamentos). Quando clicado no botão finalizar compra na activity C, quero que ele volte diretamente para activity A retornando o meu objeto compra.

Usando o onNavigateUp() e definindo a activity pai no manifest, consigo retornar diretamente para a activity A, mas não condigo passar o meu objeto compra. Usando o NavUtils.navigateUpTo(activity, intent), também consigo retornar para activity A, mas na activity A meu método onActivityResult recebe o data como null.

Qual forma usar nessa situação para voltar para a activity A retornando meu objeto compra?

5 respostas

Fala ai Marcos, tranquilo ?

Me parece que faz mais sentido você trabalhar com fragments nesse caso, que você pode manter seus objetos na activity compartilhando entre todos os fragments e consegue retornar para onde deseja de maneira bem fácil.

O que acha ? Vai gerar uma refatoração legal, contudo vai ser bem positivo para seu software.

Então Matheus, na verdade essa situação foi só para exemplificar a transação entre as activitys, quero mais é entender como eu poderia obter essa transação esperada através de activitys e retornar o objeto da activity C diretamente para a activity A.

Em um caso em que tenho essas três activitys, como poderia obter esse resultado?

Uma maneira é você falar que a outra activity depende do resultado, fazendo um startActivityForResult por exemplo.

Outra coisa que pode ser feita, mas é bem bizarro e não tão elegante, é colocarmos essa informação na application, que você tem acesso a ela em todos os lugares.

Mas através do NavUtils.navigateUpTo, onde eu passo uma intent com a flag FLAG_ACTIVITY_SINGLE_TOP (para trazer a activity A para o topo da pilha) e retorno para a activity que defini no manifest como pai (no caso a activity A), ou de algum método semelhante não tem como eu capturar esse retorno do objeto não?

Porque fazendo dessa forma eu até consigo receber no onActivityResult da activity A um retorno com o request code correto, mas o result code retorna RESULT_CANCELED e o data retorna null.

No android não tem nenhuma forma de navegar para a primeira activity da pilha retornando um extra não, assim como fazemos com setResult?

Até onde vi aparentemente não :(

Pelo menos nada que conheça, pelos apps que já trabalhei e os códigos open source que acompanho, consigo ver a galera resolvendo esse tipo de coisa via fragment, por mais boas práticas.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software