2015-08-03 4 views
0

Я хочу реализовать спиннер позицию в ActionBar, который сортирует фильмы, основанные на популярность, рейтинг и выручкуКак сохранить исходное состояние в деятельности, имеющей Spinner элемент в 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(); 
     } 

это, как я понимаю, ошибка вызвана тем, что в дом/Up Button уменьшает представления Mainactivity, а затем повторно создает MainActivity (подразумевая, что он снова входит в onCreateOptionsMenu)

в то время как при нажатии на BackButton, то MainAcitvity не разрушается, как это было в OnStop состоянии, и нажатием на кнопку обратно переходит в OnStart состояние,

(Другое наблюдение, в Mainactivity при смене элемента спиннера только setOnItemSelectedListener называется и не onCreateOptionsMenu.)

Мой вопрос заключается в том, чтобы сохранить исходное состояние отсортированный при нажатии кнопки UP

ответ

0

Вы можете использовать этот код, чтобы поместить позицию элемента Spinner в пучке, который используется для возврата позиции, когда t его деятельность возобновляется. Просто добавьте эти строки в класс и измените имя вашего объекта spinner на общедоступное имя. Ваш прядильщик должен быть доступен вне пустоты onCreate!

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));   
    } 
+0

Я вижу это больше как вопрос http://stackoverflow.com/questions/16657421/back-and-nav-up-have-different-results кнопку со стрелкой вверх воссоздает MainActivity, в то время как BackButton Перезагружает активность. Я заметил, что решение, предлагаемое hoss, не работает –

+0

Я вижу это больше как проблема stackoverflow.com/questions/16657421/... Кнопка вверх воссоздает MainActivity, тогда как backButton перезапускает активность. Я заметил, что решение предложенный хосом, не работает. Вместо этого я попытался с этим кодом в onOptionsItemSelected if (id == android.R.id.home) { Цель намерения = NavUtils.getParentActivityIntent (это); intent.setFlags (Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); NavUtils.navigateUpTo (это, намерение); return true; } –

+0

Что вы можете сделать, это сохраняет элемент Spinner в настройках и читается из настроек после восстановления вашей acitivtyty. http://developer.android.com/guide/topics/ui/settings.html – tim687

 Смежные вопросы

  • Нет связанных вопросов^_^