Чтобы включить кнопку возврата ActionBar, вам, очевидно, понадобится ActionBar в вашей Activity. Это устанавливается темой, которую вы используете. Вы можете установить тему для своей деятельности вAndroidManfiest.xml
. Если вы используете, например, @android:style/Theme.NoTitleBar
тему, у вас нет ActionBar. В этом случае вызов getActionBar()
вернет null. Поэтому сначала убедитесь, что у вас есть ActionBar.
Следующим шагом является установка android:parentActivityName
по которому вы хотите перемещаться, если вы нажмете кнопку «Назад». Это AndroidManifest.xml
тоже нужно сделать в .
Теперь вы можете включить кнопку "Назад" в onCreate
методе вашего «дочернего» действия.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getActionBar().setDisplayHomeAsUpEnabled(true);
}
Теперь вам нужно реализовать логику кнопки возврата. Вы просто переопределяете onOptionsItemSelected
метод в своем «дочернем» действии и проверяете идентификатор кнопки возврата, которая есть android.R.id.home
.
Теперь вы можете запустить метод, NavUtils.navigateUpFromSameTask(this);
НО если вы не указали android:parentActivityName
in you, AndroidManifest.xml
это приведет к сбою вашего приложения.
Иногда это то, чего вы хотите, потому что это напоминает вам, что вы «что-то забыли». Поэтому, если вы хотите предотвратить это, вы можете проверить, есть ли у вашей активности родительский объект, используя этот getParentActivityIntent()
метод. Если это возвращает значение null, вы не указали родителя.
В этом случае вы можете запустить onBackPressed()
метод, который в основном работает так же, как если бы пользователь нажал кнопку возврата на устройстве. Хорошая реализация, которая никогда не приведет к сбою вашего приложения, будет:
@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);
}
}
Обратите внимание, что анимация, которую видит пользователь, различается между NavUtils.navigateUpFromSameTask(this);
и onBackPressed()
.
Какой путь выбрать, решать вам, но я нашел решение полезным, особенно если вы используете базовый класс для всех своих действий.
getActionBar().setDisplayHomeAsUpEnabled(true);
в onCreate иswitch (item.getItemId()) {case android.R.id.home: onBackPressed();break;}
вonOptionsItemSelected
? оба в ServicesViewActivity