我想在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。)
我的问题是如何在按下向上按钮时保留已排序列表的初始状态
答案 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));
}