Speichern und Neuladen ListView mit Shared Preferences [Speichern onDestroy()]
Ich am erstellen einer To-Do-Liste. Jetzt meine app fügt und entfernt Daten aus einer ListView. Allerdings, wenn ich in der Nähe meiner Anwendung die Daten wird gelöscht. Ich will SharedPreferences zu speichern, die Daten onDestroy(), dann, wenn meine app öffnet, wollte ich die Daten neu zu laden.
Aber ich weiß nicht, wie zu gehen über die Erfüllung dieser Aufgabe. Kann jemand mir helfen, mit dem speichern einer ListView mit Gemeinsamen Vorlieben (aka ich bin auf der Suche nach code)?
Gibt es tutorials für nur eine gemeinsame Vorliebe, ich bin auf der Suche dynamisch hinzufügen mehrerer Zeichenfolgen, wenn meine Anwendung geschlossen wird. Dann, wenn ich es erneut öffnen, werden die Daten angezeigt. Ich bin nur mit EINER AKTIVITÄT, die Seite, alles wird auftreten, auf der einen Seite.
HIER IST MEIN CODE:
public class Main_ToDoList extends Activity implements OnClickListener
{
private Button btnAdd;
private EditText et;
private ListView lv;
ArrayList<String> list = new ArrayList<String>();
ArrayAdapter<String> adapter;
final Context context = this;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
btnAdd = (Button)findViewById(R.id.addTaskBtn);
btnAdd.setOnClickListener(this);
et = (EditText)findViewById(R.id.editText);
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1, list);
//set the lv variable to your list in the xml
lv=(ListView)findViewById(R.id.list);
lv.setAdapter(adapter);
//set ListView item listener
lv.setOnItemClickListener(new AdapterView.OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> parent, View view, final int position, long id)
{
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);
alertDialogBuilder.setTitle("Confirm Delete");
alertDialogBuilder.setMessage("Sure you want to delete?");
alertDialogBuilder.setCancelable(false);
alertDialogBuilder.setPositiveButton("Yes", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialogInterface, int i)
{
adapter.remove(adapter.getItem(position));
}
});
alertDialogBuilder.setNegativeButton("No", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialogInterface, int i)
{
dialogInterface.cancel();
}
});
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
}
});
}
public void onClick(View v)
{
String input = et.getText().toString();
if(input.length() > 0)
{
adapter.add(input);
et.setText("");
}
}
@Override
public void onDestroy()
{
super.onDestroy();
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
//Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main__to_do_list, menu);
return true;
}
}
InformationsquelleAutor JustAnotherUser32 | 2013-09-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Android SharedPreferences zu speichern ein einzelnes Schlüssel-Wert gekoppelten Daten. In anderen Worten, es ist nicht gemacht, um zu speichern, sich wiederholende und komplexe Daten. In deinem Fall, sich eine Liste enthalten kann, als 100 Zeilen oder mehr, hängt von Ihrem app. Wenn Sie erstellen ein SharedPreferences-Objekt für jede Zeile wäre es 100+, es ist nicht effizient überhaupt. Die Lösung für dieses ist, wie oben angedeutet, ist die Verwendung der Android SQLite-Datenbank.
Ein gutes tutorial: http://www.androidhive.info/2011/11/android-sqlite-database-tutorial/
InformationsquelleAutor Guster
Als vorgeschlagen von Stefano Munarini, können Sie eine Datenbank verwenden.
Auf der anderen Seite, können Sie die Schleife auf die Elemente der ArrayAdapter (Verpackung Ihrer ArrayList) und speichern Sie Sie auf Ihrem SharedPreferences in:
Einige überlegungen:
SharedPreferences.Editor.putStringSet(String, Set<String>)
um einen einzelnen Eintrag.InformationsquelleAutor Sustain
Ich weiß seine alten aber ich will meine Lösung für diejenigen, die Noch wollen, verwenden Sie sharepref und finden Sie in diesem Beitrag.
1) erstellen von benutzerdefinierten Klasse, die Sie erweitert ArrayAdapter und überschreiben Sie die toString-Methode.einfach Anhängen und setzen ',' zwischen jeder Zeile.
2)Speichern Sie die Daten als ein string. legen Sie es in onPause()
3)In onResume Wiederherstellung der Daten zurück, die durch die Verblockung der string mit ',' und fügen Sie es an den adapter an.
InformationsquelleAutor Maor Hadad