Я разрабатываю приложение с ActionBars, которое поддерживает Gingerbread и up. Поэтому в основном я использую библиотеку поддержки и расширяю
ActionBarActivity
для всех моих действий. Все работает хорошо, за исключением
onSupportNavigateUp()
метод. Он просто не вызван, как указано в документации.
Этот метод вызывается всякий раз, когда пользователь выбирает переход вверх в пределах ваша иерархия активности приложений из панели действий.
Это довольно просто, но я не смог понять, почему он работает не так, как ожидалось, и не помог Googling. Это ошибка? или я чего-то не хватает?
Ответ 1
если вы переопределите onOptionsItemSelected
, тогда onSupportNavigateUp
не будет вызываться.
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// handle ⬅️ button here
break;
}
return true;
}
Ответ 2
Установили ли вы в своем файле Manifest.xml родительскую активность? Если да, то это не будет вызвано. @see http://developer.android.com/reference/android/support/v7/app/ActionBarActivity.html#onSupportNavigateUp()
Ответ 3
Как уже говорилось, если вы переопределите OnOptionsItemSelected
, OnSupportNavigateUp
не будет вызываться. вы можете убедиться, что он вызван, добавив значение по умолчанию: case внутри OnOptionsItemSelected
, например:
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.something:
Intent intent = new Intent(this,someActivity.class);
startActivity(intent);
finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
super.onOptionsItemSelected(item)
будет удостовериться, что вызывается OnSupportNavigateUp
. Это на случай, если вы не хотите, чтобы дело было рассмотрено внутри вашего OnOptionsItemSelected
Ответ 4
Кто знал... onSupportNavigateUp()
работает только с 4.0 и выше. Ниже вызывается onNavigateUp()
.