2012-05-07 36 views
0

我有含有在从JSON对象取出物品一个ListActivity。 当用户单击某个项目时,每个项目都会在DetailActivity类中显示其详细信息和属性。SharedPreferences一定项目从ListActivity

所以我有一个活动,从ListActivity显示所选项目的属性。 在DetailActivity类中有一个复选框,用来标记Item为'Favorite'。因此,每当DetailActivity中的CheckBox被选中时,当用户再次打开该Item的DetailActivity时,总是检查CheckBox的状态。

我工作迄今已通过把布尔通过SharedPreferences。但是我的方法只保存DetailActivity类的状态,而不管哪个Item被检查为收藏。所以它不保存某个项目的状态,只保存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(){ 

    } 

回答

1

Ofcourse,你需要保存每个项目的复选框状态。

从属性,我认为“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)); 

      } 
      }); 

我希望这将有助于你。

+0

谢谢你的回答。我看到了全局,但我有点迷失了细节。你能通过在我的代码上面提供更改来帮助我回答我的问题吗?那太好了。 Thx – hectichavana

+0

啊我知道了,只是用'名字'(视频位置)改变了所有的'钥匙'。谢谢! – hectichavana

0

在我的理解u必须使多个项目作为favorites.for这u必须使用字符串数组共享偏好或使用DB items.ifü正在使用的共享阵列来存储列表的状态prrefernceü可以看看这个link

相关问题