Android ActionBar со списком навигации: сохранить выбранную позицию позиции во время изменения конфигурации?

У меня есть ActionBar со списком режима навигации. Проблема заключается в том, что после выбора элементов из навигационного счетчика, когда меняется ориентация экрана, выбранный индекс поворота навигатора сбрасывается на 0.

Как сохранить выбранный индекс счетчика во время изменений конфигурации?

благодаря

Вы должны переопределить onSaveInstanceState и сохранить выбранную позицию списка навигации для onSaveInstanceState . Не забудьте восстановить позицию в onCreate .

Посмотрите пример ниже:

 public class MainActivity { private static final String CURRENT_FRAGMENT_TAG = "fragmentPosition"; @Inject @Named("navigationFragments") private Provider<? extends Fragment>[] fragmentProviders; @Override protected void onCreate(Bundle bundle) { super.onCreate(bundle); final ActionBar actionBar = getSupportActionBar(); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); actionBar.setListNavigationCallbacks(ArrayAdapter.createFromResource( this, R.array.navigation_menu, android.R.layout.simple_list_item_1), new ActionBar.OnNavigationListener() { @Override public boolean onNavigationItemSelected(int itemPosition, long itemId) { final String fragmentTag = "fragment-" + itemPosition; // to prevent fragment re-selection and loosing early saved state if (getSupportFragmentManager().findFragmentByTag(fragmentTag) != null) { return true; } final Fragment fragment = fragmentProviders[itemPosition].get(); getSupportFragmentManager().beginTransaction(). replace(android.R.id.content, fragment, fragmentTag). commit(); return true; } }); actionBar.setSelectedNavigationItem(bundle != null ? bundle.getInt(CURRENT_FRAGMENT_TAG) : 0); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putInt(CURRENT_FRAGMENT_TAG, getSupportActionBar().getSelectedNavigationIndex()); } /* Additional stuff here */ } 

Provider<? extends Fragment>[] fragmentProviders Provider<? extends Fragment>[] fragmentProviders – это список объектов фабричных методов, которые создают новый фрагмент. Замените getSupportActionBar() на getActionBar() и getSupportFragmentManager() на getFragmentManager() если вы не используете actionbarsherlock