我尝试使用“保存/加载首选项”通过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);
答案 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)来获取所有值。