Quero terminar uma atividade de outra atividade, como:
Na Atividade [A], ao clicar no botão, estou chamando a Atividade [B] sem terminar a Atividade [A].
Agora, na Atividade [B], existem dois botões, Novo e Modificar . Quando o usuário clica em modificar, pop uma atividade [A] da pilha com todas as opções marcadas.
Mas quando o usuário clicar no botão Novo da Atividade [B], terei que terminar a Atividade [A] da pilha e recarregar essa Atividade [A] novamente na pilha.
Estou tentando, mas não consigo terminar a Atividade [A] da pilha ... Como posso fazer isso?
Estou usando o código como:
Da Atividade [A]:
Intent GotoB = new Intent(A.this,B.class);
startActivityForResult(GotoB,1);
Outro método na mesma atividade
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == 1)
{
if (resultCode == 1) {
Intent i = getIntent();
overridePendingTransition(0, 0);
i.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
finish();
overridePendingTransition(0, 0);
startActivity(i);
}
}
}
E na Atividade [B], ao clicar no botão:
setResult(1);
finish();
Respostas:
Faça sua atividade A no arquivo de manifesto:
launchMode = "singleInstance"
Quando o usuário clicar em novo, faça
FirstActivity.fa.finish();
e chame o novo Intent.Quando o usuário clicar em modificar, chame o novo Intent ou simplesmente conclua a atividade B.
PRIMEIRA MANEIRA
Em sua primeira atividade, declare uma
Activity object
como esta,agora use esse objeto em outro
Activity
para terminar a primeira atividade como esta,SEGUNDA MANEIRA
Ao chamar sua atividade
FirstActivity
que você deseja terminar assim que seguir em frente, você pode adicionar um sinalizador ao chamarFirstActivity
Mas, usando este sinalizador, a atividade será concluída mesmo se você não quiser. e às vezes,
onBack
se você quiser mostrar oFirstActivity
, terá que chamá-lo usando a intenção.fonte
Isso você pode fazer, mas acho que não deve interromper o fluxo normal de atividade. Se quiser terminar a atividade, basta enviar uma transmissão da atividade B para a atividade A.
Crie um receptor de transmissão antes de iniciar sua atividade B:
Envie a transmissão da atividade B para a atividade A quando quiser terminar a atividade A de B
Espero que funcione para você ...
fonte
broadcast_receiver
comunregisterReceiver()
Esta é uma questão de comunicação bastante comum. Uma abordagem seria usar um ResultReceiver na Atividade A:
e, em seguida, na Atividade B, você pode simplesmente concluí-la sob demanda, assim:
Experimente algo assim.
fonte
Existe uma abordagem que você pode usar no seu caso.
Etapa 1: iniciar a atividade B a partir da atividade A
Passo 2: Se o usuário clicar no botão modificar, inicie a Atividade A usando o
FLAG_ACTIVITY_CLEAR_TOP
.Also, passe o sinalizador extra.Passo 3: Se o usuário clicar no botão Adicionar, inicie a Atividade A usando o
FLAG_ACTIVITY_CLEAR_TOP
.Also, passe o sinalizador extra.FLAG_ACTIVITY_CLEAR_TOP
irá limpar todas as atividades abertas até o alvo e reiniciar se nenhum modo de lançamento for definido na atividade alvoPasso 4: Agora,
onCreate()
método da Atividade A, precisa recuperar esse sinalizador.fonte
Comece sua atividade com o código de solicitação:
E você pode fechá-lo de qualquer outra atividade como esta:
fonte
Veja minha resposta à pergunta Stack Overflow Concluir todas as atividades anteriores .
O que você precisa é adicionar o
Intent.FLAG_CLEAR_TOP
. Este sinalizador garante que todas as atividades acima da atividade de destino na pilha sejam concluídas e que uma seja mostrada.Outra coisa de que você precisa é a
SINGLE_TOP
bandeira. Com este, você evita que o Android crie uma nova atividade se já houver uma criada na pilha.Apenas fique atento, pois se a atividade já foi criada, o intent com esses sinalizadores será entregue no método chamado
onNewIntent(intent)
(você precisa sobrecarregá-lo para manipulá-lo) na atividade de destino.Então,
onNewIntent
você tem um método chamado restart ou algo que irá chamarfinish()
e lançar uma nova intenção em relação a si mesmo, ou tem umrepopulate()
método que definirá os novos dados. Eu prefiro a segunda abordagem, é mais barata e você sempre pode extrair aonCreate
lógica em um método separado que pode ser chamado para popular.fonte
Acabei de aplicar a solução do Nepster e funciona perfeitamente. Há uma pequena modificação para executá-lo a partir de um fragmento.
Para o seu fragmento
E para o OnNewIntent () da Activity que você gostaria de reiniciar.
fonte
Acho que tenho a abordagem mais fácil ... em pressionar novo em B ..
e em A pegue
fonte
Eu sei que esta é uma questão antiga, alguns desses métodos não funcionaram para mim, então para quem está procurando no futuro ou tendo meus problemas, isso funcionou para mim
Eu ignorei
onPause
e chameifinish()
esse método.fonte
Primeiro ligue e
startactivity()
depois usefinish()
fonte