繁体   English   中英

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

[英]How to save button State into SharedPreferences in Android

我想创建内容应用程序,我从JSON加载数据,当用户点击button将此内容保存到SQLitedatabase
我想用这个库作为按钮。
对于可检查按钮,我使用代码

我写下面的代码,当点击按钮我将这个内容保存到SQLitedatabase ,但我无法将按钮状态保存到SharedPreferences

当点击按钮( 布尔选中 )按钮打开时 ,再次单击按钮时关闭此按钮。

我想点击按钮,打开此按钮并保存在SharedPreferences ,当转到其他activity并再次返回此activity ,请参阅打开此按钮不要关闭 当再次点击此按钮时, 关闭按钮!

活动代码:

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.post_FavImage);
    postShow_favPost.init(this);
    postShow_favPost.setOnCheckStateChangeListener(new ShineButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(View view, boolean checked) {

            if (checked == true) {
                editor.putBoolean("isChecked", true);
                editor.commit();

                //////////// Database
                favDB = new FavHelper(context);

                long addNewFAV = favDB.insertFAV(title, image, content, dateTime, author, category);

                if (addNewFAV < 0) {
                    TastyToast.makeText(context, "Not save in database", TastyToast.LENGTH_LONG, TastyToast.ERROR);
                } else {
                    TastyToast.makeText(context, "Save in database", TastyToast.LENGTH_LONG, TastyToast.SUCCESS);
                }

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

        }
    });

我该如何解决我的问题?

那么你需要在单击按钮时保存状态。 例如 :

postShow_favPost.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (postShow_favPost.isChecked()){
            editor.putBoolean("isChecked", true);
            editor.apply();
     }
     else{
         editor.putBoolean("isChecked", false);
         editor.apply();
      }
    }
});

然后你必须在你的onCreate()加载它:

@Override
protected void onCreate(Bundle savedInstanceState) 
{
    SharedPreferences saveFavPrefs = getSharedPreferences(favData, MODE_PRIVATE);;
    postShow_favPost.setChecked(saveFavPrefs.getBoolean("isChecked", true));
}

也许这个例子会对你有帮助。

编辑

好吧,让我们在你设定f功能,您刚刚完成做什么你做你的数据库,在这之后,如启动关闭状态,让我们说你要

所以:

public void loadPrefs(SharedPreferences prefs){
    favState = prefs.getBoolean("isChecked",false);
}


public void f(SharedPreferences.Editor editor){
//database stuff
 editor.putBoolean("isChecked", true); // or false
 editor.apply();

 loadPrefs(prefs); 

//在这里,一旦你完成数据库的使用,你的状态将被保存为你的按钮,之后在你的onResume()中你可以将该状态改为false(关闭),以防你想要它just for that post

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM