Сохранить выбранный 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 следует заменить вашим объектом, и вы должны использовать соответствующий метод для него