[英]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.