Galera, tenho uma aplicação que tem uma tela de Login e mais algumas telas. Quando clico no Menu Sair de minha aplicação, volta na tela de Login. Gostaria que encerrasse o aplicativo. Alguém tem uma ideia de como faz?
Encerrar aplicação
31 Respostas
É android?
É. To usando o finish no switch-case, mas cai na tela de login
finish() volta à tela que invocou a activity anterior. Não existe mecanismo próprio no android para fazer isso, pois este comportamento não é esperado. Você ja percebeu que apps famosos como Gmail, Maps, app de Contatos não tem um botão Sair ou Finalizar?
leia mais sobre:
Estou lendo o link e não estou achando nada, tem como me ajudar?
É o link da pesquisa. No primeiro site já tem uma boa discussão sobre o assunto.
Vi esse link:
http://stackoverflow.com/questions/4732184/how-to-finish-an-android-application
Não estou entendendo bem ao certo o que tem que fazer.
Leia também a documentação da API:
http://developer.android.com/reference/android/app/Activity.html
Nela você vai encontrar um diagrama contendo o ciclo de vida de uma activity.
Pensei nesse OnDestroy. Não sei como usá-lo.
Hmmm. Acho que entendi melhor o que você quer e acho que da pra fazer sim. Quando você invoca finish() em uma Activity, esta é finalizada e o android volta o fluxo para a Activity que a invocou, por isso está voltando para o login.
Vamos com calma. A Activity que tem o botão “Sair” provavelmente foi invocado da Activity de login, certo? Poste o código (classe inteira) da Activity de login.
Segue Login.java
package com.br.aquavendas;
import com.br.aquavendas.vo.Global;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class Login extends Activity{
public static Global global = new Global();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
final EditText edtLogin = (EditText) findViewById(R.id.edtLogin);
final EditText edtSenha = (EditText) findViewById(R.id.edtSenha);
edtLogin.setText("");
edtSenha.setText("");
final SharedPreferences preferencia = getSharedPreferences("config", 0);
Button btnLogar = (Button) findViewById(R.id.btnLogar);
btnLogar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String login = preferencia.getString("login", "admin");
String senha = preferencia.getString("senha", "123");
if (login.equals(edtLogin.getText().toString())){
if (senha.equals(edtSenha.getText().toString())){
startActivity(new Intent(getBaseContext(), Main.class));
global.setUsuarioLogado(edtLogin.getText().toString());
}
}
}
});
} // Fim onCreate
}
g4j
A classe Login ta postada ai, ok? No aguardo de uma ajuda quando possível.
Faz assim:
Na tela de login, se o usuário e senha forem digitados corretamente, chama a próxima atividade e invoca o método finish(); logo após. Assim, a tela de login vai ser fechada, e quando vc voltar, o aplicativo será encerrado, pq não existe mais a atividade de login na pilha de atividades.
m_araujo01, Seria no botão Logar da Classe Login?
Button btnLogar = (Button) findViewById(R.id.btnLogar);
btnLogar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String login = preferencia.getString("login", "admin");
String senha = preferencia.getString("senha", "123");
if (login.equals(edtLogin.getText().toString())){
if (senha.equals(edtSenha.getText().toString())){
startActivity(new Intent(getBaseContext(), Main.class));
global.setUsuarioLogado(edtLogin.getText().toString());
}
}
}
});
Olá
É só colocar o finish() após o global.setUsuarioLogado(edtLogin.getText().toString());
Ok, obrigado. Vou testar.
Olá
É só colocar o finish() após oglobal.setUsuarioLogado(edtLogin.getText().toString());
Não entendi. Finaliza a activity após fazer o login?
É o que disseram pra fazer, tem alguma sugestão?
Já testou? O que ocorreu?
Estou testando no momento. Já posto o resultado.
Matou a paulada, A H Gusukuma, rs. Tópico encerrado. Valeu mesmo. Novamente vc me ajudou, e a todos também. Meu muito obrigado.
Segue Login.java
... startActivity(new Intent(getBaseContext(), Main.class)); ... }
Uma possível saída é você usar o método startActivityForResult, que retorna para a activity chamadora (método onActivityResult da activity de login) e você pode finalizar dependendo do código que retorna (requestCode).
A solução que o A H Gusukuma disse deu certo, mas valeu a dica.
Quando você tecla em voltar no dispositivo e não no botão o que acontece? Vai sair da aplicação ou vai voltar pro login? Tudo depende da regra de negócio da aplicação, de no caso você querer que volte para a tela de login. Como um botão logout ao invés de sair por exemplo.
Fiz o que o A H Gusukuma sugeriu e ele encerra a aplicação ao clicar em Sair no meu Menu. Não testei do dispositivo.
Legal, entendi. Só que você entendeu o porque? É importante você assimilar isso. Leia a documentação e estude o diagrama de fluxo de execução das activity.
Valeu g4j e A H Gusukuma pela ajuda nesse tópico.
fbrigatt, respondendo a sua pergunta, vai depender muito das regras de navegação do seu aplicativo. Eu por exemplo, costumo fechar a tela de login (finish()
sempre que o login for efetuado com sucesso, assim não tem perigo de o usuário clicar em voltar, e ir para a tela de login novamente. Eu sempre uso também o recurso de preferências do Android (SharedPreferences), para salvar os dados de login e senha, para que o usuário não precise digitar novamente os dados quando abrir o aplicativo novamente. Mas aí vai da necessidade de cada um.
Ok, mas já resolvi, obrigado pela dica.
A H Gusukuma, pode me ajudar nesse tópico, não sei o que fazer mais. Por favor?
http://www.guj.com.br/java/304744-erro-estranho-ao-selecionar-item-de-lista
Vou dar uma olhada
Valeu, tópico concluído