2013-06-26 3 views
1

Я пытался использовать настройки сохранения/загрузки, чтобы сохранить вход пользователя через EditView. Однако мой текущий код сохраняет только последнюю строку, введенную пользователем. Поэтому, когда я снова вхожу в приложение, единственная строка в ListView - это последняя строка, введенная пользователем.SavePreferences сохраняет только последний элемент в ListView

Как я могу это исправить?

EDITED КОД НИЖЕ:

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

Ознакомьтесь с моим обновленным ответом ниже, на примере. – nunofmendes

ответ

0

Вы не переписывая тот же ключ?

SavePreferences("LISTS", task); 

в editor.putString (ключ, значение);

Он всегда будет записывать ключевые слова «LISTS» из SharedPreferences, перезаписывая предыдущее значение.

Вы должны попытаться получить текущие сохраненные значения в строке и добавить новое значение.

Сортировать по:

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. 
} 
+0

ok я попробую этот метод ... thx – user1949400

+0

Я все еще немного смущен, где я должен это исправить. Я понимаю, что мой ключ, «LISTS» всегда будет написан, поэтому он забирает последнее значение. Как я могу сделать это так, чтобы он включался в разные ключи, поэтому он не перезаписывает предыдущее значение. – user1949400

+0

Я думаю, что лучший способ сделать то, что вы хотите, - это использовать somekind структуры. Вы по-прежнему можете сохранить одну и ту же кнопку, но создайте массив (например, JSONArray) со всеми значениями. Давайте сделаем простой пример. Мы используем key = toast; JSONArray array = new JSONArray (preferences.getString (Toast)); array.add (задача) savePreferenceS ("list", array.toString); Это в основном создает JSONArray (например, [1,2,3,4]) и преобразует его в строку «[1,2,3,4]» и сохраняет в sharedpreferences. Затем вы снова загружаете эту строку, воссоздаете jsonarray и добавляете новый элемент. – nunofmendes

0

Ваша проблема заключается в том, что вы пишете на одних и тех же ключевых «СПИСКИ», и он будет всегда брать последнее значение. Вы должны использовать разные ключи или просто получить предыдущее значение из ключа «LISTS», добавить символ разделителя и добавить новые настройки. Затем в вашем приложении LoadPReferences используйте String.split (pattern), чтобы получить все значения.