Как сохранить начальное состояние 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));        
    }
Другие вопросы по тегам