如何在ActionBar中保留具有Spinner项的Activity的初始状态

时间:2015-08-03 09:59:28

标签: android android-spinner up-button

我想在actionBar中实现一个微调器项目,它根据受欢迎程度,评级和收入对电影进行排序

在这里,我根据最高评分排序,然后点击电影项目以显示电影项目详情。

实施步骤:当我点击详细信息页面的后退按钮时,它会转到上一页(按最高评级排序),但当我点击DetailsActivity的主页按钮(操作栏中的向上按钮)时, 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按钮降低了Mainactivity的视图然后重新创建MainActivity,(暗示它再次进入onCreateOptionsMenu)

然后单击backButton时,MainAcitvity不会因为处于Onstop状态而被销毁,按下后退按钮会进入onStart状态,

(另一个观察,在更改微调器项时的Mainactivity中,只调用setOnItemSelectedListener而不是onCreateOptionsMenu。)

我的问题是如何在按下向上按钮时保留已排序列表的初始状态

1 个答案:

答案 0 :(得分:0)

您可以使用此代码将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));        
    }