我有一个notes应用程序,通过该应用程序,我可以实现两种视图类型:列表视图和网格视图。
用户可以根据自己的选择在listViewgridView之间切换。我的问题是我一直试图永久保存视图的状态,以便在启动时打开选定的视图。我正在尝试使用SharedPreferences实现此目的。我的代码在做什么错了?

private static final String KEY_NAME = "viewState";
private ListView mListNotes;
    private GridView mGridNotes;
 SharedPreferences sharedPreferences;
    SharedPreferences.Editor editor;
private boolean mViewIsChanged = false;

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
// set the layouts for list/grid
            mListNotes = (ListView) findViewById(R.id.main_listview);
            mGridNotes = (GridView) findViewById(R.id.main_gridview);
 // Retrieve value from Shared Preferences.
    sharedPreferences = getPreferences(Context.MODE_PRIVATE);
    mViewIsChanged = sharedPreferences.getBoolean(KEY_NAME, false);
    if (!mViewIsChanged){
        mListNotes.setVisibility(View.VISIBLE);
        mGridNotes.setVisibility(View.GONE);}
    else {
        mListNotes.setVisibility(View.GONE);
        mGridNotes.setVisibility(View.VISIBLE);
    }


 @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
     View customTitleView = inflater.inflate(R.layout.dialog_menu, null);
        LinearLayout mListViewSelect = (LinearLayout) customTitleView.findViewById(R.id.list_select);
        LinearLayout mGridViewSelect = (LinearLayout) customTitleView.findViewById(R.id.grid_select);
        switch (item.getItemId()) {
            case R.id.addItem:
              //  start NoteActivity
                startActivity(new Intent(this, NoteActivity.class));
                break;
            case R.id.changeView:
                final AlertDialog alertbox = new AlertDialog.Builder(this).create();
                alertbox.setCancelable(true);
                alertbox.setView(customTitleView);
                alertbox.show();
                mListViewSelect.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {


// Saving Data
sharedPreferences = getPreferences(Context.MODE_PRIVATE);
editor = sharedPreferences.edit();
                    editor.putBoolean(KEY_NAME, mViewIsChanged);
                    editor.apply();
                    mListNotes.setVisibility(View.VISIBLE);
                    mGridNotes.setVisibility(View.GONE);
                        alertbox.dismiss();
                    }
                });
        mGridViewSelect.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
// saving Data in SharedPreferences
        mViewIsChanged = true;
        sharedPreferences = getPreferences(Context.MODE_PRIVATE);
        editor = sharedPreferences.edit();
        editor.putBoolean(KEY_NAME, mViewIsChanged);
        editor.apply();
        mListNotes.setVisibility(View.GONE);
        mGridNotes.setVisibility(View.VISIBLE);
        alertbox.dismiss();
    }
});

最佳答案

之后,在您的onCreate()中

mViewIsChanged = sharedPreferences.getBoolean(KEY_NAME, false);

mListNotes = (ListView) findViewById(R.id.main_listview);
mGridNotes = (GridView) findViewById(R.id.main_gridview);


加上这个

If (!mViewIsChanged){
  mListNotes.setVisibility(View.VISIBLE);
  mGridNotes.setVisibility(View.GONE);}
else {
mListNotes.setVisibility(View.GONE);
    mGridNotes.setVisibility(View.VISIBLE);
}


或者在将适配器设置在您的onResume()中之后放置我提供的逻辑
希望能有所帮助。

09-11 03:49