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.NoTitleBar
tema, 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:parentActivityName
atividade 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 onCreate
mé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 onOptionsItemSelected
mé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:parentActivityName
em você, AndroidManifest.xml
isso 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