No Android, eu tenho algumas atividades, digamos A, B, C.
Em A, eu uso esse código para abrir B:
Intent intent = new Intent(this, B.class);
startActivity(intent);
Em B, eu uso esse código para abrir C:
Intent intent = new Intent(this, C.class);
startActivity(intent);
Quando o usuário toca em um botão em C, quero voltar para A e limpar a pilha de trás (feche B e C). Portanto, quando o usuário usar o botão voltar B e C não será exibido, tentei o seguinte:
Intent intent = new Intent(this, A.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
Mas B e C ainda estão aparecendo se eu usar o botão voltar quando volto à atividade A. Como posso evitar isso?
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_NEW_TASK);
fonte
CLEAR_TOP
bandeira - essa combinação é a ÚNICA que limpou completamente toda a pilha e tornou a nova atividade a única no aplicativo. Obrigado!Que tal adicionar no arquivo manifestos para atividades relacionadas:
para a definição de atividade de B e C? Eles não serão adicionados ao backstack. Não tenho certeza se é isso que você deseja.
fonte
Isso me incomoda por um longo tempo. Finalmente, resolvi fazer isso:
No fragmento, use:
Em Atividade, use (adicione mais um sinalizador de intenção
Intent.FLAG_ACTIVITY_CLEAR_TASK
comparado ao fragmento):fonte
android:launchMode="singleTop"
ao elemento de atividade no seu manifesto a Atividade Aintent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
eintent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
ao iniciar a Atividade AIsso significa que, quando a Atividade A é iniciada, todas as tarefas sobre ela são limpas para que A seja a primeira. Uma nova pilha traseira é criada com A na raiz, e o uso
singleTop
garante que você só inicie A uma vez (já que A está no topo devido a..._CLEAR_TOP
).fonte
A partir da API 16 (Jelly Bean), você pode simplesmente ligar
finishAffinity()
.Agora você também pode ligar
ActivityCompat.finishAffinity(Activity activity)
com a biblioteca de compatibilidade.Certifique-se de definir taskAffinity no manifesto como um nome de pacote exclusivo para esse grupo de atividades.
Consulte para obter mais informações:
http://developer.android.com/reference/android/support/v4/app/ActivityCompat.html#finishAffinity%28android.app.Activity%29
fonte
Tente usar
e não
fonte
Se o seu aplicativo tiver uma versão mínima do sdk 16, você poderá usar finishAffinity ()
Conclua esta atividade e todas as atividades imediatamente abaixo dela na tarefa atual que possui a mesma afinidade.
Isso é bom para mim. Na tela Pagamento principal, remova todas as atividades de pilha traseira,
http://developer.android.com/reference/android/app/Activity.html#finishAffinity%28%29
fonte
Conforme Wakka em Removendo uma atividade da pilha do histórico ...
Adicionar
android:noHistory="true"
atributo para o seu<activity>
noAndroidManifest.xml
assim:fonte
Para pesquisas futuras, tente este código.
fonte
Use finishAffinity (); na tarefa C ao iniciar a tarefa A para limpar as atividades de backstack.
fonte
Use este código para iniciar uma nova atividade e feche ou destrua todas as outras pilhas de atividades ou pilhas de volta.
fonte
fonte
Encontrei uma solução interessante que pode ajudar. Eu fiz isso no meu
onBackPressed()
método.FinishAffinity
remove a conexão da atividade existente à sua pilha. E, em seguida, terminar ajuda a sair dessa atividade. O que acabará saindo do aplicativo.fonte
Eu achei as respostas aqui um pouco enganadoras, porque o código na pergunta original parece funcionar bem para mim?
Como A é a atividade raiz, iniciá-la em B ou C somente com FLAG_ACTIVITY_CLEAR_TOP remove B e C da pilha traseira.
fonte
No kotlin, é quase o mesmo que o java. Apenas | símbolo é substituído por ou texto. Então, está escrito como-
fonte
Eu tentei todas as soluções e nenhuma funcionou individualmente para mim. Minha solução é:
Declarar
Activity A
comoSingleTop
usando[android:launchMode="singleTop"]
no manifesto do Android.Agora adicione os seguintes sinalizadores ao iniciar
A
de qualquer lugar. Isso limpará a pilha.fonte
Intent.FLAG_ACTIVITY_CLEAR_TOP
não funcionará neste caso. Por favor, use(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK)
Para mais detalhes, consulte esta documentação.
fonte
Parece-me que você precisa para começar
Activity C
a partirActivity B
usandostartActivityForResult()
. Quando você clica em um botão emActivity C
, chamadasetResult(RESULT_OK)
efinish()
assimActivity C
terminou. EmActivity B
, você pode ter aonActivityResult()
resposta também chamandofinish()
a si próprio e depois será levado de volta paraActivity A
.fonte
logout.addFlags (Intent.FLAG_ACTIVITY_CLEAR_TASK); logout.addFlags (Intent.FLAG_ACTIVITY_NEW_TASK);
fonte
Você pode usar este exemplo para chamar a sua
Activity A
deActivity C
Intent loout = new Intent(context, LoginActivity.class); loout.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); context.startActivity(loout);
fonte
para mim adicionando
Intent.FLAG_ACTIVITY_CLEAR_TASK
resolveu o problemafonte
Kotlin reutilizável avançado:
Você pode definir o sinalizador diretamente usando o método setter. No Kotlin
or
é o substituto para o Java bit a bit ou|
.Se você usar isso mais de uma vez, crie uma função de extensão Intent
Você pode chamar diretamente essa função antes de iniciar a intenção
Se você precisar adicionar outros sinalizadores em outras situações, adicione um parâmetro opcional à função de extensão.
fonte
Além disso
FLAG_ACTIVITY_CLEAR_TOP
, você pode tentar adicionarIntent.FLAG_ACTIVITY_SINGLE_TOP
também:intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
fonte
O código fornecido funciona corretamente. Eu tentei na amostra do ciclo de vida do aplicativo.
Não tenho B e C na pilha de trás após iniciar a atividade A com o sinalizador FLAG_ACTIVITY_CLEAR_TOP
fonte
liguei
activity_name.this.finish()
depois de iniciar uma nova intenção e funcionou para mim.Mas isso não funcionará para mim ... Eu não estou sugerindo esta solução para uso, mas se a configuração do sinalizador não funcionar para você, você pode tentar isso ... mas ainda assim eu recomendo não usá-lo
fonte
Adicionar NO Flag Flag na intenção.
Na atividade B, inicie a atividade C como abaixo >>>>>>
fonte
Em manifesto
e
fonte
Adicione isso ao seu
Activity B
eActivity C
ou
Override
onBackPressed
função para evitar pressionar novamente com areturn
.fonte
Use o método setFlags () para que o verso claro abra todas as atividades feche e inicie sua atividade
fonte