0

У меня есть приложение с несколькими действиями. До сих пор у меня была «жестко закодированная» иерархия между ними, поэтому у меня был андроид: parentActivityName, установленный явно в каждой из них (но в качестве активности запуска). Однако теперь я добавил настройки в меню более чем одного действия.Есть ли способ сделать кнопку «назад/вверх» AppCompat ActionBar действующей как кнопка «назад» системы

Есть ли способ, чтобы стрелка «назад» в панели действия функционировала как кнопка назад системы (в нижней части экрана)? Другими словами: если установлено parentActivityName, то оно возвращается к родительской активности, если нет, то оно закрывает активность и «возвращается» к предыдущему действию.

Это то, что я пробовал, но не работает. Если я не вызываю actionBar.setDisplayHomeAsUpEnabled (true), то на панели действий нет «обратной» стрелки, но если я вызову ее в активном режиме, у которого нет родительского атрибута, установленного в манифесте, тогда я получаю исключение, если Я нажимаю стрелку.

abstract public class BaseActivity extends ActionBarActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(getLayoutResourceId()); 

     final ActionBar actionBar = getSupportActionBar(); 
     if (null != actionBar) { 
      actionBar.setDisplayHomeAsUpEnabled(getDisplayHomeAsUpEnabled()); 
     } 
    } 

    protected abstract int getLayoutResourceId(); 
    abstract protected boolean getDisplayHomeAsUpEnabled(); 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     final int id = item.getItemId(); 
     if (id == android.R.id.home) { 
      NavUtils.navigateUpFromSameTask(this); 
      return true; 
     } 
    } 
} 

ответ

3

Try:

if (id == android.R.id.home) { 
     onBackPressed(); 
     return true; 
    } 

Код выше будет вызывать onBackPressed, так что будьте осторожны, если вы перекрытая его. В противном случае он будет таким же, как кнопка «назад».

+0

это все еще не помогает мне отображать стрелку, когда android: parentActivityName не задано в манифесте – Gavriel

+0

@Gavriel Я не использую 'android: parentActivity', я просто использую' setDisplayHomeAsUpEnabled (true); 'с вышеуказанным кодом и его работа так же, как кнопка обратной системы –

+0

ОК, это действительно работает. Теперь я могу вызвать actionBar.setDisplayHomeAsUpEnabled (true) для каждого действия. – Gavriel