Para ativar o botão Voltar da ActionBar, você obviamente precisa de uma ActionBar em sua Atividade. Isso é definido pelo tema que você está usando. Você pode definir o tema para sua atividade no AndroidManfiest.xml. Se você estiver usando, por exemplo, o @android:style/Theme.NoTitleBartema, você não possui uma ActionBar. Nesse caso, a chamada paragetActionBar() retornará nulo. Portanto, verifique se você tem um ActionBar primeiro.
O próximo passo é definir a android:parentActivityNameatividade que você deseja navegar se pressionar o botão Voltar. Isso deve ser feito noAndroidManifest.xml também.
Agora você pode ativar o botão Voltar no onCreatemétodo da sua atividade "filho".
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getActionBar().setDisplayHomeAsUpEnabled(true);
}
Agora você deve implementar a lógica do botão voltar. Você simplesmente substitui o onOptionsItemSelectedmétodo em sua atividade "filho" e verifica o ID do botão Voltar, que é android.R.id.home.
Agora você pode disparar o método, NavUtils.navigateUpFromSameTask(this); mas se você não tiver especificado o que está android:parentActivityNameem você, AndroidManifest.xmlisso causará um travamento no aplicativo.
Às vezes, é isso que você quer, porque está lembrando que você esqueceu "algo". Portanto, se você deseja evitar isso, pode verificar se sua atividade tem um pai usando o getParentActivityIntent()método Se isso retornar nulo, você não especificou o pai.
Nesse caso, você pode acionar o onBackPressed()método que faz basicamente o mesmo, como se o usuário pressionasse o botão Voltar no dispositivo. Uma boa implementação que nunca trava seu aplicativo seria:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
if (getParentActivityIntent() == null) {
Log.i(TAG, "You have forgotten to specify the parentActivityName in the AndroidManifest!");
onBackPressed();
} else {
NavUtils.navigateUpFromSameTask(this);
}
return true;
default:
return super.onOptionsItemSelected(item);
}
}
Observe que a animação que o usuário vê é diferente entre NavUtils.navigateUpFromSameTask(this);eonBackPressed() .
Depende de você que caminho você seguirá, mas achei a solução útil, especialmente se você usar uma classe base para todas as suas atividades.
getActionBar().setDisplayHomeAsUpEnabled(true);em onCreate eswitch (item.getItemId()) {case android.R.id.home: onBackPressed();break;}emonOptionsItemSelected? os dois em ServicesViewActivity