我有一个非常简单的切换按钮"喜欢"系统。用户ID和照片ID被发送到数据库并存储...然后,在应用程序中,我使用共享首选项来记住用户是否喜欢照片。
imageToggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
addLike();
SharedPreferences preferences = getPreferences(MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putBoolean("liked", imageToggle.isChecked()); // value to store
editor.putString("pic_id", foto_id);
editor.commit();
} else {
unLike();
SharedPreferences preferences = getPreferences(MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putBoolean("liked", false); // value to store
editor.commit();
}
}
});
然后......每当创建视图时......都会检查首选项以查看照片是否被喜欢。
SharedPreferences preferences = getPreferences(MODE_PRIVATE);
boolean liked = preferences.getBoolean("liked", false);
String pic = preferences.getString("pic_id", "0");
final ToggleButton imageToggle = (ToggleButton) findViewById(R.id.like);
if (pic.equals(foto_id)) {
imageToggle.setChecked(liked);
}
问题......你可能已经猜到了...这只适用于一次一张照片。如果我点击另一张照片并喜欢它,则该照片的ID将成为pic_id,并且原始照片将被取消选中。
我甚至不确定SharedPreferences是实现我想要做的事情的正确方法。 (存储和检索喜欢的照片的多个值)。我已经查看了从保存套件到将所有内容转换为JSON的所有内容......我已经考虑过每次查询数据库以确定用户是否喜欢特定的照片...
......但是我接近我想要实现的目标,我只知道必须有一些非常简单的方法来做到这一点,我并没有意识到这一点。我想让SharedPreferences做的就是记住我是否喜欢每张单独的照片。每张照片可能只是一个新的SharedPreference?
对于我到目前为止所做的事情,最简单的解决方案是什么?
答案 0 :(得分:0)
因为您不知道将选择多少张照片并且它可以非常动态地更改,您可能希望将类似照片ID的列表保存到共享首选项中。通常,共享首选项只允许您保存数据集而不是列表,因此这个问题显示了如何执行此操作。
答案 1 :(得分:0)
是的,sharedPreferences应该有效。您可以使用fotoID作为键,如果您有fotoID,则可以在共享首选项中设置和查找fotoID以管理布尔值" likes"。
imageToggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
addLike();
SharedPreferences preferences = getPreferences(MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putBoolean(foto_id, imageToggle.isChecked()); // changed from "liked". Changed "foto_id" to foto_id -mysticola
// remove this line editor.putString("pic_id", foto_id);
editor.commit();
} else {
unLike();
SharedPreferences preferences = getPreferences(MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putBoolean(foto_id, false); // changed from liked
editor.commit();
}
}
});
和
SharedPreferences preferences = getPreferences(MODE_PRIVATE);
boolean liked = preferences.getBoolean(foto_id, false); // change from "liked"
// remove String pic = preferences.getString("pic_id", "0");
final ToggleButton imageToggle = (ToggleButton) findViewById(R.id.like);
if (liked) { // changed this part
imageToggle.setChecked(liked);
}
答案 2 :(得分:0)
试试这个:
var buttonLocalState: SharedPreferences =
context.getSharedPreferences(SPP_NAME, MODE_PRIVATE)
fun savebuttonstate(mExampleList: ArrayList<commentItemModel>) {
val userLocalDatabaseEditor: SharedPreferences.Editor = buttonLocalState.edit()
val gson = Gson()
val json = gson.toJson(mExampleList)
userLocalDatabaseEditor.putString("yesbtn list", json)
userLocalDatabaseEditor.apply()
}
fun getyesBtn(): ArrayList<commentItemModel> {
val gson = Gson()
var mExampleList: ArrayList<commentItemModel> = ArrayList<commentItemModel>()
val json: String = buttonLocalState.getString("yesbtn list", null).toString()
val type: Type = object : TypeToken<ArrayList<commentItemModel?>?>() {}.getType()
if (!mExampleList.isEmpty()) {
mExampleList = gson.fromJson<Any>(json, type) as ArrayList<commentItemModel>
}
return mExampleList
}
这是将项目添加到列表的模型类,例如:list.Add(commentItemModel(1, true))
data class commentItemModel(var id: Int, var clicked: Boolean) {
}