簡體   English   中英

如何將狀態保存到Android中的SharedPreferences中

[英]How can save state into SharedPreferences in Android

我要為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();
                }
            }
        });

我該如何解決這個問題?

布爾值可以通過if(favState)進行檢查, if(favState) if(favState == true)布爾值本身是true還是false。

並保存其他狀態,如我在其他部分中所述。

               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();
                }

如果尚未將checked的默認值定義為true,則需要執行以下操作, 因為boolean的默認值為false:

//更改此

editor.putBoolean("isChecked", checked);

//對此

editor.putBoolean("isChecked", true);

讓我知道這是否為您帶來任何改變。

對您的代碼進行以下更改。 在else部分中,再次將值設為false。 這很重要,因為如果您的isChecked值先前為true,則else部分將能夠使其為false:

我將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();
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM