如何在Android中将状态保存到SharedPreferences中

时间:2016-09-25 04:37:02

标签: android sharedpreferences android-sharedpreferences

我希望为imageButton保存 isClickedState ,如果点击此imageButton 保存此状态并更改颜色,则在未点击时显示默认颜色并保存虚假状态!

我写下面的代码,但是当点击按钮时不保存这个状态,当回到其他活动并再次转到此活动时看到不保存状态!

MyActivityCodes:

            private ShineButton postShow_favPost;
    private String favData = "FavPrefsList";
    private Boolean favState;

    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.post_show_page);

        bindActivity();

        //Give Data
        Bundle bundle = getIntent().getExtras();

        if (bundle != null) {
            title = bundle.getString("title");
            image = bundle.getString("image");
            content = bundle.getString("content");
            dateTime = bundle.getString("dateTime");
            author = bundle.getString("author");
            category = bundle.getString("category");
            categoryID = bundle.getString("categoryID");
        }

        mAppBarLayout.addOnOffsetChangedListener(this);

        //// Save Fav state
        final SharedPreferences saveFavPrefs = getSharedPreferences(favData, MODE_PRIVATE);
        final SharedPreferences.Editor editor = saveFavPrefs.edit();

        favState = saveFavPrefs.getBoolean("isChecked", false);

        postShow_favPost = (ShineButton) mToolbar.findViewById(R.id.po_image1);
        postShow_favPost.init(this);
        postShow_favPost.setOnCheckStateChangeListener(new ShineButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(View view, boolean checked) {

                if (favState == true) {
                    editor.putBoolean("isChecked", true);
                    editor.commit();
                    Toast.makeText(context, "Checked True", Toast.LENGTH_SHORT).show();
                } else {
                    editor.putBoolean("isChecked", false);
                    editor.commit();
                    Toast.makeText(context, "Checked False", Toast.LENGTH_SHORT).show();
                }
            }
        });

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

  

布尔值可由if(favState)检查,不需要这样做if(favState == true)布尔值本身为真或假。

并保存替代状态,如我在其他部分中评论的那样。

               if (favState) {
                    editor.putBoolean("isChecked", checked);
                    editor.commit();
                    Toast.makeText(context, "Checked True", Toast.LENGTH_SHORT).show();
                } else {
                    //editor.putBoolean("isChecked", False);
                    //editor.commit();
                    Toast.makeText(context, "Checked False", Toast.LENGTH_SHORT).show();
                }

答案 1 :(得分:0)

如果您没有将checked的默认值定义为true,那么您需要执行以下,因为boolean的默认值为false:

//更改此

editor.putBoolean("isChecked", checked);

//到此

editor.putBoolean("isChecked", true);

如果这对您有任何改变,请告诉我。

答案 2 :(得分:0)

对您的代码进行以下更改。在else部分中,再次将值设为false。它很重要,因为如果你的isChecked值以前是真的,那么else部分将能够使其成为假:

  

我将if(favState == true)更改为if(checked == true)

if (checked == true) {
      editor.putBoolean("isChecked", true);
      editor.commit();
      Toast.makeText(context, "Checked True", Toast.LENGTH_SHORT).show();
 } else {
      editor.putBoolean("isChecked", false);
      editor.commit();
      Toast.makeText(context, "Checked False", Toast.LENGTH_SHORT).show();
  }