Щоб увімкнути кнопку повернення ActionBar, вам очевидно потрібен ActionBar у своїй діяльності. Це встановлюється темою, яку ви використовуєте. Ви можете встановити тему своєї активності в розділі AndroidManfiest.xml
. Якщо ви використовуєте, наприклад, @android:style/Theme.NoTitleBar
тему, у вас немає ActionBar. У цьому випадку виклик до getActionBar()
повернеться недійсним. Тому спочатку переконайтеся, що у вас є 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
у вас AndroidManifest.xml
це призведе до збою вашої програми.
Іноді це те, чого ти хочеш, тому що це нагадує тобі, що ти забув "щось". Тож якщо ви хочете запобігти цьому, ви можете перевірити, чи є у вашої активності батько, використовуючи getParentActivityIntent()
метод. Якщо це значення повернеться до нуля, ви не вказали батьківську.
У цьому випадку ви можете запустити 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