SavePreferences仅保存ListView中的最后一项

时间:2013-06-26 16:51:04

标签: android listview adapter

我尝试使用“保存/加载首选项”通过EditView保存用户的输入。但是,我当前的代码只保存用户输入的最后一个字符串。因此,当我重新进入应用程序时,ListView中唯一的字符串是用户输入的最后一个字符串。

我该如何解决这个问题?

以下编辑代码:

addButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            String task = display.getText().toString();


                adapter.add(task);
                adapter.notifyDataSetChanged();

                JSONArray array = new JSONArray();
                array.add(task);


                SavePreferences("LISTS", array.toString());
        }
    });
}

protected void SavePreferences(String key, String value) {
    // TODO Auto-generated method stub
    SharedPreferences data = PreferenceManager.getDefaultSharedPreferences(this);
    SharedPreferences.Editor editor = data.edit();
    editor.putString("LISTS", value);
    editor.commit();


}

protected void LoadPreferences(){
    SharedPreferences data = PreferenceManager.getDefaultSharedPreferences(this);
    String dataSet = data.getString("LISTS", "");


    adapter.add(dataSet);
    adapter.notifyDataSetChanged();

    ArrayList<String> dataSetarrlist = new ArrayList<String>();
    dataSetarrlist.add(dataSet);
    adapter = new ArrayAdapter<String>(this, 
                         android.R.layout.simple_list_item_multiple_choice,dataSetarrlist);
    lv.setAdapter(adapter);

2 个答案:

答案 0 :(得分:0)

你不是要覆盖同一把钥匙吗?

SavePreferences("LISTS", task);

在     editor.putString(key,value);

它将始终写入SharedPreferences的键“LISTS”,覆盖之前的值。

您应该尝试将当前保存的值转换为字符串并附加新值。

排序:

String dataset = loadPreferences();
SavePreferences("LISTS",dataset+task);

取决于所需的保存格式。

- 示例 -

protected void SavePreferences(String key, String value) {
// TODO Auto-generated method stub
   SharedPreferences data = PreferenceManager.getDefaultSharedPreferences(this);
   JSONArray array = new JSONArray(data.getString(key,"");
   SharedPreferences.Editor editor = data.edit();
   editor.putString(key, value);
   editor.commit();
}


protected void LoadPreferences(){
   SharedPreferences data = PreferenceManager.getDefaultSharedPreferences(this);
   JSONArray dataSet = new JSONArray(data.getString("LISTS", "None Available");)
   for(int i = 0; i<dataSet.length; i++)
     adapter.add(dataSet.getString(i);
   adapter.notifyDataSetChanged(); // You don't need this if you aren't overriding the Adapters 'add' method.
}

答案 1 :(得分:0)

你的问题是你正在写相同的密钥“LISTS”,它将始终是最后一个值。您应该使用不同的键或只是从“LISTS”键获取先前的值,添加分隔符并附加新的首选项。然后在LoadPReferences中使用String.split(pattern)来获取所有值。