Щоб увімкнути кнопку повернення 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