0

我想在 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();
        }

这就是我的理解,错误是因为主页/向上按钮破坏了 Mainactivity 的视图,然后重新创建 MainActivity,(暗示它再次进入 onCreateOptionsMenu)

而当单击后退按钮时,MainAcitvity 不会因为它处于 Onstop 状态而被破坏,并且按下后退按钮它会进入 onStart 状态,

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

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

4

1 回答 1

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));        
    }
于 2015-08-04T09:46:36.240 回答