无法在屏幕旋转时保留菜单项

我在其中创建了一个菜单项 (Spinner).onCreateOptionsMenu并希望保留屏幕旋转时的选择。我知道使用 是常见的做法SharedPreferences,但是在这种情况下我有点困惑,因为我没有在 中创建我的视图.onCreate(),我通常会在那里加载我保存的首选项:


    @Override

public boolean onCreateOptionsMenu(Menu menu) {

    getMenuInflater().inflate(R.menu.action_bar_spinner, menu);

    MenuItem item = menu.findItem(R.id.spinner);

    mSpinner = (Spinner) item.getActionView();

    int selectedPosition = mPrefs.getInt(SPINNER_SELECTION, 0);

    mSpinner.setSelection(selectedPosition);

    if (isOnline()) {

        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.spiner_list_item_array, R.layout.custom_spinner);

        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        mSpinner.setAdapter(adapter);

        mSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

            @Override

            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {

                mPrefsEditor.putInt(SPINNER_SELECTION, i);

                mPrefsEditor.commit();

                switch (i) {

                    case 0:

                        mBaseURL = "https://api.themoviedb.org/3/movie/popular/";

                        calltoRetrofit(mBaseURL);

                        break;

                    case 1:

                        mBaseURL = "https://api.themoviedb.org/3/movie/top_rated/";

                        calltoRetrofit(mBaseURL);

                        break;

                    case 2:

                        mIsFavoriteSelected = true;

                        mMovieURLS.clear();

                        retrieveMovies();

                        break;


                    default:

                        mBaseURL = "https://api.themoviedb.org/3/movie/popular/";

                        break;

                }



            }



郎朗坤
浏览 164回答 1
1回答

隔江千里

首先,以onCreate.以外的其他方法访问 SharedPreferences 是完全有效的。如果您在这篇文章中遇到一些问题,请查看错误消息/问题。其次,为了在屏幕旋转时保留内容,您可以onSaveInstanceState在 Activity 中使用 来保存微调器选择并onCreate在屏幕旋转时获得状态。例如:private int saved_selection = -1@Overrideprotected void onCreate(Bundle savedInstanceState) {&nbsp; &nbsp; //...&nbsp; &nbsp; if (savedInstanceState != null) {&nbsp; &nbsp; &nbsp; &nbsp; saved_selection = savedInstanceState.getInt("SPINNER_SELECTION");&nbsp; &nbsp; }&nbsp; &nbsp; //...}@Overridepublic void onSaveInstanceState(Bundle outState) {&nbsp; &nbsp; outState.putInt("SPINNER_SELECTION", saved_selection);&nbsp; &nbsp; // call superclass to save any view hierarchy&nbsp; &nbsp; super.onSaveInstanceState(outState);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {&nbsp; &nbsp; //...&nbsp; &nbsp; // set `saved_selection = i;`&nbsp; in your adapter&nbsp; &nbsp; //...&nbsp; &nbsp; if( saved_selection >= 0 ) {&nbsp; &nbsp; &nbsp; &nbsp; mSpinner.setSelection(saved_selection);&nbsp; &nbsp; }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java