Como lidar com o botão Voltar na atividade

136

Como lidar com um botão Voltar em uma atividade? Eu tenho alguns botões. Se eu clicar em um dos botões, ele será redirecionado para os botões necessários. Está funcionando bem, mas quando eu pressiono o botão Voltar, ele termina.

Como resolver este problema. Eu tenho apenas uma atividade para todos esses botões. Desde já, obrigado.

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) 
{
    if ((keyCode == KeyEvent.KEYCODE_BACK)) 
    {
        return false; //I have tried here true also
    }
    return super.onKeyDown(keyCode, event);
}

Eu usei o código acima para manipular o botão Voltar, mas não está funcionando. Quando eu pressiono o botão de voltar, ele atingiu lá.

Shekhar
fonte

Respostas:

326

Você pode lidar com isso assim:

para API nível 5 e superior

@Override
public void onBackPressed() {
    // your code.
}

mais antigo que a API 5

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        // your code
        return true;
    }

    return super.onKeyDown(keyCode, event);
}
Saurabh Pareek
fonte
6
E em fragmentos?
Crushman
1
Sim, alguém sabe como fazê-lo a partir de um fragmento
James Wierzba
3
@ identificador James-Wierzba em actividade e delegado processamento de um fragmento
Grigorii Chudnov
19

Além do exposto, eu pessoalmente recomendo

onKeyUp():

Programatically Falando keydown será acionado quando o usuário pressiona uma tecla inicialmente , mas Ele vai repetir enquanto o usuário mantém a tecla premida. *

Isso permanece verdadeiro para todas as plataformas de desenvolvimento.

O desenvolvimento do Google sugeriu que, se você estiver interceptando o botão VOLTAR em uma exibição, rastreie o KeyEvent com o rastreamento inicial no pressionamento de tecla e invoque-o com o keyup.

public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK
            && event.getRepeatCount() == 0) {
        event.startTracking();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

public boolean onKeyUp(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.isTracking()
            && !event.isCanceled()) {
        // *** Your Code ***
        return true;
    }
    return super.onKeyUp(keyCode, event);
}
Richard Sites
fonte
15

Tanto para o botão voltar do dispositivo de hardware quanto para o botão inicial suave (voltar), por exemplo, "<-" é isso que funciona para mim. (* Observe que tenho uma barra de aplicativos / barra de ferramentas na atividade)

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            //finish();
            onBackPressed();
            break;
    }
    return true;
}



@Override
public void onBackPressed() {
   //Execute your code here
   finish();

}

Felicidades!

S bruce
fonte
Usei o acabamento e ele não volta para a atividade anterior.
Si8 04/11/19
2
"finish ()" fecha apenas sua atividade atual. Você precisa lidar com o retorno à sua atividade anterior usando intent. Aliás, sua atividade anterior ainda deve estar aberta se você não a "terminar ()" ao navegar nela anteriormente.
S Bruce
Estou testando algo e atualizá-lo. Obrigado pela resposta.
Si8
1
Basta usar super.onBackPressed () em vez de finish ()
b00n12
9

Uma abordagem mais simples é capturar o botão Voltar e pressionar e chamar moveTaskToBack (true) da seguinte maneira:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        moveTaskToBack(true);
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

O Android 2.0 introduziu um novo método onBackPressed e essas recomendações sobre como lidar com o botão Voltar

Umesh K
fonte
9

Você deveria usar:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)  {
    if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.ECLAIR
            && keyCode == KeyEvent.KEYCODE_BACK
            && event.getRepeatCount() == 0) {
        // Take care of calling this method on earlier versions of
        // the platform where it doesn't exist.
        onBackPressed();
    }

    return super.onKeyDown(keyCode, event);
}

@Override
public void onBackPressed() {
    // This will be called either automatically for you on 2.0
    // or later, or by the code above on earlier versions of the
    // platform.
    return;
}

Conforme definido aqui: http://android-developers.blogspot.com/2009/12/back-and-other-hard-keys-three-stories.html

Se você estiver usando uma versão mais antiga para compilar o código, substitua android.os.Build.VERSION_CODES.ECLAIR por 5 (você pode adicionar um int privado chamado ECLAIR, por exemplo)

Neteinstein
fonte
1

Isso me ajudou ..

@Override
public void onBackPressed() {
    startActivity(new Intent(currentActivity.this, LastActivity.class));
    finish();
}

OU????? mesmo você pode usar isso para alternar gaveta também

@Override
public void onBackPressed() {
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    if (drawer.isDrawerOpen(GravityCompat.START)) {
        drawer.closeDrawer(GravityCompat.START);
    } else {
        super.onBackPressed();
    }
        startActivity(new Intent(currentActivity.this, LastActivity.class));
    finish();

}

Espero que isso ajude você .. :)

Shubham
fonte
1

Esta é uma maneira simples de fazer alguma coisa.

    @Override
        public void onBackPressed() {
            // do what you want to do when the "back" button is pressed.
            startActivity(new Intent(Activity.this, MainActivity.class));
            finish();
        }

Eu acho que pode haver maneiras mais elaboradas de fazer isso, mas eu gosto de simplicidade. Por exemplo, usei o modelo acima para fazer o usuário sair do aplicativo e depois voltar para outra atividade de minha escolha.

Eddie Towers
fonte