Как сохранить начальное состояние Activity с элементом Spinner в ActionBar
Я хочу реализовать спиннер в actionBar, который сортирует фильмы по популярности, рейтингу и доходам.
Здесь я сортировал на основе наивысших оценок, а затем нажимал на элемент фильма, чтобы отобразить детали элемента фильма.
Шаги для реализации: Когда я нажимаю кнопку "Назад" на странице сведений, она переходит на предыдущую страницу (отсортированную по наивысшему рейтингу), но когда я нажимаю кнопку "Домой" (кнопка "ВВЕРХ" на панели действий) "Подробности", MainActivity отображает список, отсортированный по популярности, а не по рейтингу
Ниже приведен код, реализующий пункт меню
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.forecast_fragment_menu, menu);
MenuItem item = menu.findItem(R.id.action_settings);
Spinner spinner = (Spinner) MenuItemCompat.getActionView(item);
ArrayAdapter adapter = ArrayAdapter.createFromResource(getActivity(), R.array.sortBy_Entries, android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
String[] sortByEntriesList = getResources().getStringArray(R.array.sortBy_Entries);
String[] sortByValuesList = getResources().getStringArray(R.array.sortBy_Values);
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
String mSortOrder = sharedPreferences.getString(SORT_ORDER, SORT_ORDER_DEFAULT_VALUE);
CheckedTextView textView = (CheckedTextView) view;
String sortBy = (String) textView.getText();
if (sortBy.equals(sortByEntriesList[0])) {
mSortOrder = sortByValuesList[0];
} else if (sortBy.equals(sortByEntriesList[1])) {
mSortOrder = sortByValuesList[1];
} else if (sortBy.equals(sortByEntriesList[2])) {
mSortOrder = sortByValuesList[2];
}
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString(SORT_ORDER,mSortOrder);
editor.commit();
updateMovies();
}
это, как я понимаю, ошибка вызвана тем, что кнопка home/Up Button выводит представления Mainactivity, а затем заново создает MainActivity (подразумевая, что он снова входит в onCreateOptionsMenu)
тогда как при нажатии кнопки BackButton MainAcitvity не уничтожается, как это было в состоянии Onstop, а при нажатии кнопки назад он переходит в состояние onStart,
(Другое замечание: в Mainactivity при изменении элемента счетчика вызывается только setOnItemSelectedListener, а не onCreateOptionsMenu.)
Мой вопрос заключается в том, как сохранить начальное состояние отсортированного списка при нажатии кнопки UP
1 ответ
Вы можете использовать этот код, чтобы поместить позицию элемента Spinner в связку, которая используется для изменения позиции после возобновления действия. Просто добавьте эти строки в класс и измените имя вашего объекта-счетчика на публичное имя. Ваш блесна должна быть доступна вне onCreate void!
String spinnerPosition = "spinnerPosition";
// Saves the state upon rotating the screen/restarting the activity
@Override
protected void onSaveInstanceState(Bundle bundle) {
super.onSaveInstanceState(bundle);
bundle.putInt(spinnerPosition , mSpinner.getSelectedItemPosition());
}
// Restores the state upon rotating the screen/restarting the activity
@Override
protected void onRestoreInstanceState(Bundle bundle) {
super.onRestoreInstanceState(bundle);
mSpinner.setSelection(bundle.getInt(spinnerPosition));
}