Quando estou clicando no botão Logout em minha atividade de perfil, quero levar o usuário à página de Login , onde ele precisa usar novas credenciais.
Portanto, usei este código:
Intent intent = new Intent(ProfileActivity.this,
LoginActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
no onButtonClick
botão Logout.
Mas o problema é que quando clico no botão Voltar do dispositivo na Atividade de login, ele me leva para a ProfileActivity. Eu esperava que o aplicativo fechasse quando pressiono o botão Voltar do dispositivo no LoginActivity.
O que estou fazendo de errado?
Eu também adicionei android:launchMode="singleTop"
no manifesto da minha LoginActivity
Obrigado
android
back-stack
Archie.bpgc
fonte
fonte
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
eu obtive a resposta desta pergunta: stackoverflow.com/questions/3473168/…Respostas:
A solução proposta aqui funcionou para mim:
Java
Kotlin
No entanto, requer nível de API> = 11.
fonte
FLAG_ACTIVITY_CLEAR_TASK
.Esta é a forma oficial de obter. Não há necessidade de alterar todas as atividades no aplicativo.Aqui está uma solução para limpar todas as atividades do seu aplicativo ao usar o botão de logout.
Cada vez que você iniciar uma atividade, inicie-a assim:
Quando você quiser fechar o aplicativo inteiro, faça o seguinte:
RESULT_CLOSE_ALL é uma variável global final com um número inteiro único para sinalizar que você deseja fechar todas as atividades.
Em seguida, defina o
onActivityResult(...)
retorno de chamada de cada atividade para que, quando uma atividade retornar com o valor RESULT_CLOSE_ALL, ela também chamefinish()
:Isso causará um efeito em cascata que fecha todas as suas atividades.
No entanto, este é um hack e usa
startActivityForResult
de uma forma que não foi projetada para ser usada.Talvez a melhor maneira de fazer isso seja usando broadcast receivers, conforme mostrado aqui:
Ao sair, limpe a pilha do histórico de atividades, evitando que o botão "voltar" abra atividades somente conectadas
Veja estes tópicos para outros métodos também:
Android: limpe a pilha posterior
Concluir todas as atividades anteriores
fonte
Para limpar a pilha de atividades completamente, você deseja criar uma nova pilha de tarefas usando TaskStackBuilder, por exemplo:
Isso não apenas criará uma nova pilha de tarefas limpa, mas também permitirá o funcionamento adequado do botão "para cima" se sua LoginActivity tiver uma atividade pai.
fonte
FLAG_ACTIVITY_NEW_TASK
oufinishAffinity()
não funcionou para mim. Somente esta resposta resolveu o propósito.finishAffinity()
adicionado na API 16. UseActivityCompat.finishAffinity()
em versões anteriores. Quando você iniciará qualquer atividade usando a intenção e terminará a atividade atual. Agora use em seuActivityCompat.finishAffinity()
lugarfinish()
. ele encerrará todas as atividades empilhadas abaixo da atividade atual. Isso funciona bem para mim.fonte
ActivityCompat.finishAffinity()
finishAffinity()
também termina a atividade atual com todas as atividades presentes na pilha posterior da mesma afinidade.O que funcionou para mim
fonte
Uma solução possível que posso sugerir é adicionar
android:launchMode="singleTop"
no manifesto para minha ProfileActivity . e quando o logout for clicado, você poderá efetuar o logoff reiniciando a sua LoginActivity. ao sair, você pode ligar para isso.fonte
Para API 11+, você pode usar
Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK
assim:Ele apagará totalmente todas as atividades anteriores e iniciará uma nova atividade.
fonte
Você pode tentar
finishAffinity()
, ele fecha todas as atividades atuais e funciona no Android 4.1 e superiorfonte
Eu também estou enfrentando o mesmo problema..
na atividade de login o que eu faço é.
no logout
Isso funciona bem, mas quando estou no ActivityLoggedIn e minimizo o aplicativo e clico no ícone do botão de inicialização na gaveta do aplicativo, a MainActivity começa novamente: - / estou usando o sinalizador
para a MainActivity.
fonte
Use o seguinte para
activity
remover o sinalizador CLEAR_TASK para uso do fragmento.
Espero que isso possa ser usado para algumas pessoas.
fonte
Apenas guarde
fonte
Nenhuma das sinalizações de intent funcionou para mim, mas foi assim que corrigi:
Quando um usuário sai de uma atividade, eu tive que transmitir uma mensagem dessa atividade e, em seguida, recebê-la nas atividades que eu queria encerrar e depois chamo terminar (); e funciona muito bem.
fonte
Experimente isso vai funcionar:
fonte
Na API de nível 11 ou superior, use
FLAG_ACTIVITY_CLEAR_TASK
eFLAG_ACTIVITY_NEW_TASK
sinalize no Intent para limpar toda a pilha de atividades.fonte
Usa isto
fonte
adicione ao manifesto para sua atividade
android:launchMode="singleTask"
fonte
Kotlin avançado e reutilizável:
Você pode definir o sinalizador diretamente usando o método setter. No Kotlin
or
é a substituição do bit a bit Java ou|
.Se você planeja usar isso regularmente, crie uma função de extensão Intent
Você pode então chamar esta função diretamente antes de iniciar o intent
Se você precisar da opção de adicionar sinalizadores adicionais em outras situações, adicione um parâmetro opcional à função de extensão.
fonte