Quiero guardar el estado de una casilla de verificación de lista de selección múltiple. Tengo el siguiente diseño.Opción múltiple ListView y SharedPreferences
Lo que quiero hacer es guardar el estado de, por ejemplo, "test1 y test3" y cuando vuelva a esta actividad esta checkboxs se comprueban. Estoy usando preferencias compartidas. tengo el siguiente código.
Esto carga mi lista:
mList = (ListView) findViewById(R.id.ListViewTarefas);
final TarefaDbAdapter db = new TarefaDbAdapter(this);
db.open();
data = db.getAllTarefas(getIntent().getExtras().get("nomeUtilizadorTarefa").toString());
adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_multiple_choice,data);
mList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
mList.setAdapter(adapter);
LoadSelections();
y este es el código siguiente carga y guarda el estado de los checkboxs (supuestamente).
@Override
protected void onPause() {
// always handle the onPause to make sure selections are saved if user clicks back button
SaveSelections();
super.onPause();
}
private void ClearSelections() {
// user has clicked clear button so uncheck all the items
int count = this.mList.getAdapter().getCount();
for (int i = 0; i < count; i++) {
this.mList.setItemChecked(i, false);
}
// also clear the saved selections
SaveSelections();
}
private void LoadSelections() {
// if the selections were previously saved load them
SharedPreferences settingsActivity = getPreferences(MODE_PRIVATE);
if (settingsActivity.contains(data.toString())) {
String savedItems = settingsActivity.getString(data.toString(), "");
this.data.addAll(Arrays.asList(savedItems.split(",")));
int count = this.mList.getAdapter().getCount();
for (int i = 0; i < count; i++) {
String currentItem = (String) this.mList.getAdapter().getItem(i);
if (this.data.contains(currentItem)) {
this.mList.setItemChecked(i, true);
}
}
}
}
private void SaveSelections() {
// save the selections in the shared preference in private mode for the user
SharedPreferences settingsActivity = getPreferences(MODE_PRIVATE);
SharedPreferences.Editor prefEditor = settingsActivity.edit();
String savedItems = getSavedItems();
prefEditor.putString(data.toString(), savedItems);
prefEditor.commit();
}
private String getSavedItems() {
String savedItems = "";
int count = this.mList.getAdapter().getCount();
for (int i = 0; i < count; i++) {
if (this.mList.isItemChecked(i)) {
if (savedItems.length() > 0) {
savedItems += "," + this.mList.getItemAtPosition(i);
} else {
savedItems += this.mList.getItemAtPosition(i);
}
}
}
return savedItems;
}
Debo cargar los métodos SaveSelections y Clear Selections en los botones.
El problema es que esto no funciona. alguien puede ayudarme por favor?
Mis saludos.
¿Intentó poner algunos registros en su código? Por ejemplo, does settingsActivity.contains (data.toString()) devuelve true? ¿Y qué cadena obtiene a través del método getString()? – Egor
Hola. El problema es que cuando ingreso de nuevo en esta actividad, agrego más valores que los que existían y establece que todas las casillas sean verdaderas. – unnamed
Luego debe sobrescribir los valores existentes, lo que significa que debe almacenarlos bajo la clave existente. – Egor