为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

郎朗坤 2021-05-31 13:53:33
我在其中创建了一个菜单项 (Spinner).onCreateOptionsMenu并希望保留屏幕旋转时的选择。我知道使用 是常见的做法SharedPreferences,但是在这种情况下我有点困惑,因为我没有在 中创建我的视图.onCreate(),我通常会在那里加载我保存的首选项:    @Overridepublic 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;                }            }
查看完整描述

1 回答

?
隔江千里

TA贡献1906条经验 获得超10个赞

首先,以onCreate.以外的其他方法访问 SharedPreferences 是完全有效的。如果您在这篇文章中遇到一些问题,请查看错误消息/问题。


其次,为了在屏幕旋转时保留内容,您可以onSaveInstanceState在 Activity 中使用 来保存微调器选择并onCreate在屏幕旋转时获得状态。例如:


private int saved_selection = -1


@Override

protected void onCreate(Bundle savedInstanceState) {

    //...


    if (savedInstanceState != null) {

        saved_selection = savedInstanceState.getInt("SPINNER_SELECTION");

    }


    //...

}


@Override

public void onSaveInstanceState(Bundle outState) {

    outState.putInt("SPINNER_SELECTION", saved_selection);


    // call superclass to save any view hierarchy

    super.onSaveInstanceState(outState);

}


@Override

public boolean onCreateOptionsMenu(Menu menu) {

    //...

    // set `saved_selection = i;`  in your adapter

    //...

    if( saved_selection >= 0 ) {

        mSpinner.setSelection(saved_selection);

    }

}


查看完整回答
反对 回复 2021-06-02
  • 1 回答
  • 0 关注
  • 163 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信