Tenho uma atividade principal: quando clico em um botão, inicia uma nova atividade, usei o seguinte código para fazer isso:
Intent intent = new Intent(this, SettingsActivity.class);
startActivity(intent);
O código acima foi executado a partir da atividade principal.
Agora, na minha nova atividade, chamada pela atividade principal, tenho um botão Voltar. Quando clico neste botão voltar, quero que minha nova atividade seja fechada e ela deve voltar à atividade principal original.
Eu tentei ligar super.finish()
e apenas finish()
(a partir da nova atividade), mas isso fecha meu aplicativo inteiro (incluindo a minha atividade principal).
Como posso fechar a atividade que está atualmente em foco e retornar à atividade principal?
EDITADO
O fato de o botão voltar do meu telefone também fechar todo o meu aplicativo me leva a pensar que iniciei a segunda atividade incorretamente?
OK, eu tenho procurado,
Criei uma atividade de configurações que usa o mesmo código de manifesto e o mesmo código para iniciar a atividade.
Nas configurações Atividade, quando pressiono o botão Voltar, ele retorna à Atividade principal.
Com a atividade mencionada acima na pergunta principal, ele simplesmente sai do meu aplicativo inteiro.
Portanto, o problema não parece estar no código para concluir a atividade, mas na atividade em si.
fonte
Respostas:
Eu acho que você está chamando o
finish()
métodoMainActivity
antes de começarSettingsActivity
.O cenário que você descreveu ocorrerá de duas maneiras:
OU
Você definiu
android:noHistory = "true"
paraMainActivity
dentro oAndroidManifest.xml
que fazMainActivity
com quefinish
automaticamente pressione a tecla Voltar.OU
Antes de mudar para sua 'SettingsActivity', você ligou
finish()
para o seuMainActivity
, o que o mata. Quando você pressiona o botão Voltar, como nenhuma outra atividade é predefinida na pilha para aparecer, ela volta à tela principal.fonte
Você pode voltar para a atividade anterior apenas chamando terminar () na atividade em que está. Observe qualquer código depois que a chamada finish () for executada - você pode simplesmente retornar após ligar para finish () para corrigir isso.
Se você deseja retornar os resultados para a atividade um, ao iniciar a atividade dois, é necessário:
Dentro da atividade chamada, você pode obter o Intent do parâmetro onCreate () ou usado
Para definir retornar um resultado à atividade um, na atividade dois, faça
Se você não tem intenção de retornar, basta dizer
Se a atividade tiver resultados ruins, você poderá usar Activity.RESULT_CANCELED (isso é usado por padrão). Então, na atividade um, você faz
Para finalizar a atividade dois, use os mesmos métodos com finish (), conforme descrito acima, com os resultados já definidos.
fonte
Quando você clica no botão, você pode ligar para:
fonte
se você usa fragmento você deve usar
se você usa atividade única, você pode usar
fonte
tente este código em vez de
finish
:onBackPressed();
fonte
Você está tornando isso muito difícil. Se eu entendo o que você está tentando fazer corretamente, o botão 'voltar' interno e o próprio Android farão todo o trabalho por você: http://developer.android.com/guide/components/tasks-and-back- stack.html
Além disso, a implementação de um botão "voltar" personalizado viola a Diretriz de qualidade do aplicativo principal UX-N1: http://developer.android.com/distribute/googleplay/quality/core.html
fonte
fonte
Isso fecha o aplicativo inteiro:
fonte
Acredito que sua segunda atividade provavelmente não esteja ligada à sua atividade principal como atividade infantil. Verifique seu
AndroidManifest.xml
arquivo e veja se a<activity>
entrada para sua atividade filho inclui umandroid:parentActivityName
atributo. Deve ser algo como isto:fonte
Apenas não chame o
finish()
seu,MainActivity
pois isso elimina a necessidade de substituir oonBackPressed()
seu, aSecondActivity
menos que você esteja fazendo outras coisas nessa função. Se você sentir a "necessidade" para este botão de volta, então você pode simplesmente chamarfinish()
noSecondActivity
e que vai levá-lo para o seuMainActivity
enquanto você não ter chamadofinish()
sobre elefonte
Activity
era o anterior ou sempre volte para oMainActivity
? Além disso, se você estiver com pouca memóriaBitmaps
, deve ler esta parte do Documentos . Isso me ajudouNão sei se isso é útil ou não, mas estava enfrentando o mesmo problema e achei uma maneira bastante fácil, com apenas uma variável booleana global e a ação onResume (). No meu caso, minha Atividade C, se clicada em um botão específico, deve acionar o término () da Atividade B!
Atividade_A -> Atividade_B -> Atividade_C
Activity_A (abre normalmente Activity_B)
Activity_B (em alguns cliques, o botão abre Activity_C):
Portanto, sempre que eu clico no botão da Atividade C, ele executa a função "onResume ()" da Atividade B e volta à Atividade A.
fonte
Tente isto funciona tanto no botão voltar barra de ferramentas como botão de hardware para trás .
fonte
android:parentActivityName=".MainActivity"
para o segundo. Esse código lida com esse botão Início / Voltar no ciclo de ferramentas e apenas conclui a atividade atual retornando à anterior na pilha. Obrigado.Concluir fecha o aplicativo inteiro, isso é algo que eu odeio no desenvolvimento do Android, não concluí o que é bom, mas que eles não mantêm a sintaxe ok que possuem
Por que não
fonte
Encontramos uma situação muito semelhante.
Resposta incorreta "na pressão traseira"
Eu verifiquei todas as respostas postadas acima e nenhuma delas funcionou. A sintaxe Java para a transição entre a Atividade 2 e a Atividade 3 foi revisada para estar correta.
Recém codificado ao chamar um aplicativo de terceiros. por uma atividade. Decidimos investigar o ângulo de configuração - eventualmente nos permitindo identificar a causa raiz do problema.
Escopo : Configuração da Atividade 2 (chamador).
Causa Raiz :
Solução :
Aparentemente, nessa questão de " contrapressão ", singleInstance considera as atividades invocadas em uma instância com a atividade chamadora, enquanto que singleTask permitirá que as atividades invocadas tenham sua própria identidade suficiente para que a contrapressão pretendida funcione como deveria.
fonte
Tente este método ..
fonte
pode ser que você esteja chamando de finish (); no evento botão clique para que a atividade principal seja fechada logo após você clicar no botão e quando você voltar da próxima atividade, o aplicativo será encerrado porque a atividade principal já está fechada e não há atividade ativa.
fonte
no método onCreate da sua atividade, escreva o código a seguir.
Em seguida, substitua o método selecionado onOptionsItem da sua atividade da seguinte maneira
E você está pronto para ir.
fonte
Você precisa usar isso em sua MainActivity
O sinalizador iniciará várias tarefas que manterão sua MainActivity; quando você ligar para terminar, matará a outra atividade e o levará de volta à MainActivity.
fonte