我有一个ListActivity,其中包含从JSON对象获取的Items。 当用户单击其中一个项目时,每个项目都会在DetailActivity类中显示其详细信息和属性。
所以我有一个Activity来显示ListActivity中所选Item的属性。 在DetailActivity类上有一个CheckBox,用于将Item标记为“Favorite”。因此,每次检查DetailActivity中的CheckBox时,当用户再次打开该Item的DetailActivity时,始终会检查CheckBox的状态。
到目前为止,我通过在SharedPreferences中添加布尔值来实现。但我的方法只保存DetailActivity类的状态,无论哪个Item isChecked为收藏夹。所以它不保存某个项的状态,只保存DetailActivity类的状态。
我怎么能这样做?
这是我的代码:
final CheckBox cb_fav = (CheckBox) findViewById(R.id.cb_tool_fav);
cb_fav.setOnClickListener(this);
boolean isChecked = getBooleanFromPreferences("isChecked");
Log.i("start",""+isChecked);
cb_fav.setChecked(isChecked);
cb_fav.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
Log.i("boolean",""+isChecked);
DetailsActivity.this.putBooleanInPreferences(isChecked,"isChecked");
}
});
}
public void putBooleanInPreferences(boolean isChecked,String key){
SharedPreferences sharedPreferences = this.getPreferences(Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean(key, isChecked);
editor.commit();
}
public boolean getBooleanFromPreferences(String key){
SharedPreferences sharedPreferences = this.getPreferences(Activity.MODE_PRIVATE);
Boolean isChecked = sharedPreferences.getBoolean(key, false);
return isChecked;
}
这是我正在获取ListActivity的对象类,这些是在DetailsActivity类中显示的属性。
public class VideoLocation {
public String deleted_at = null;
public int documentary_video_length = -1;
public int id = -1;
public double latitude = 0d;
public double longitude = 0d;
public int position = -1;
public String updated_at = null;
public String name = null;
public String text = null;
public String documentary_video_url = null;
public String documentary_thumbnail_url = null;
public String audio_text_url = null;
public Footage[] footages = null;
public VideoLocation(){
}
答案 0 :(得分:1)
当然,您需要保存每个项目的复选框状态。
从属性中,我相信“id”属性对于每个对象都是唯一的。因此,您可以通过以下方式通过“id”属性保存对象的状态:
putBooleanInPreferences(check_uncheck,String.valueOf(videoLocationObject.id));
现在,无论何时显示对象,都可以通过以下方式检索状态:
boolean check_uncheck=getBooleanFromPreferences(String.valueOf(videoLocationObject.id));
如果“id”属性不唯一,则选择每行唯一的属性作为SharedPreferenceStorage的键。
您的代码:
final CheckBox cb_fav = (CheckBox) findViewById(R.id.cb_tool_fav);
boolean isChecked = getBooleanFromPreferences(String.valueOf(yourObject.id));
Log.i("start",""+isChecked);
cb_fav.setChecked(isChecked);
cb_fav.setOnClickListener(this);
cb_fav.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
Log.i("boolean",""+isChecked);
putBooleanInPreferences(isChecked,String.valueOf(yourObject.id));
}
});
我希望这会对你有所帮助。
答案 1 :(得分:0)
在我的理解中,你必须将多个项目作为收藏夹。因此,你必须在共享首选项中使用字符串数组或使用数据库来存储列表项的状态。如果你正在使用共享prrefernce数组,你可以检查出这个link