Сохранить выбранный NavigationItem через изменения ориентации

Я реализовал для устройств Android 3+ навигацию по представлениям через ActionBar NavigationMode (DROP_DOWN_LIST).

      getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);

      SpinnerAdapter mSpinnerAdapter = ArrayAdapter.createFromResource(this, R.array.action_list, android.R.layout.simple_spinner_dropdown_item);

      getActionBar().setListNavigationCallbacks(mSpinnerAdapter, new OnNavigationListener() {
          @Override
          public boolean onNavigationItemSelected(int index, long arg1) {
              if(index == 0)
                  selectHomeView();
              else
                  selectMainView();

              return true;
          }
      });

Это работает как задумано, но при изменении ориентации onNavigationItemSelected вызывается снова с index = 0, возвращая мою активность в первое представление.

Как я могу сохранить это состояние? И не позволяйте onNavigationItem вызываться с индексом 0 onCreate?

РЕДАКТИРОВАТЬ:

После ответа Кирилла есть возможность сохранить текущий inedx, но есть третье представление, которое нельзя выбрать через NavigationList, и если я не вызову setNavigationItemSelected после onCreate, это автоматически сработает с index = 0, возвращая приложение к первому Посмотреть.

Это моя проблема.

1 ответ

Вы можете расширить следующую функцию, которая будет выполняться всякий раз, когда состояние активности может быть потеряно:

@Override    
protected void onSaveInstanceState(Bundle savedInstanceState) {   
    super.onSaveInstanceState(savedInstanceState);
    // Save the state of the drop down menu
    savedInstanceState.putInt("selectedIndex",mDropMenu.getSelectedIndex());
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState)
   super.onRestoreInstanceState(savedInstanceState);
   // Restore the state of the drop down menu
   mDropMenu.setSelectedIndex(savedInstanceState.getInt("selectedIndex"));
}

обратите внимание, что mDropMenu следует заменить вашим объектом, и вы должны использовать соответствующий метод для него

Другие вопросы по тегам