Выбор Spinner - Сохранить в SharedPreferences, затем Получить - PullRequest
3 голосов
/ 21 февраля 2011

Я использую «SharedPreferences» в моем приложении, чтобы сохранить возможность сохранять / извлекать строковые значения из нескольких полей edittext, и это прекрасно работает.У меня также есть Spinner в моей деятельности со строковым массивом для его полезных значений.Но мне неясно, как записать выбор счетчиков в SharedPreferences, а затем прочитать SharedPreferences, чтобы удалить его и установить его значение.

Вот моя конфигурация для текста редактирования:

-Кнопка для активации сохранения значений в SharedPreferences-

public void buttonSaveSendClick(View view) {

    SharedPreferences.Editor editor = getPreferences(0).edit();

    EditText editTextCallId = (EditText) findViewById(R.id.editTextCallId);
    editor.putString("editTextCallIdtext", editTextCallId.getText().toString());
    editor.putInt("selection-startCallId", editTextCallId.getSelectionStart());
    editor.putInt("selection-endCallId", editTextCallId.getSelectionEnd());
    editor.commit();
}

-Кнопка для активации восстановления последних сохраненных значений из SharedPreferences-

public void buttonRestoreLastClick(View view) {

    SharedPreferences prefs = getPreferences(0); 

    EditText editTextCallId = (EditText) findViewById(R.id.editTextCallId);
    String editTextCallIdtextrestored = prefs.getString("editTextCallIdtext", null);
    editTextCallId.setText(editTextCallIdtextrestored, EditText.BufferType.EDITABLE);
    int selectionStartCallId = prefs.getInt("selection-startCallId", -1);
    int selectionEndCallId = prefs.getInt("selection-endCallId", -1);
    editTextCallId.setSelection(selectionStartCallId, selectionEndCallId);
}

Любые предложения о том, как создать коллекцию выбранного значения счетчикав первой кнопке (сохранить)?Тогда как вернуть это сохраненное значение в представление счетчиков при нажатии кнопки «восстановить»?

1 Ответ

6 голосов
/ 21 февраля 2011

Вы должны позвонить editor.apply(); один раз после всех ваших editor.put(); заявлений. В противном случае все изменения, внесенные вами в настройки, будут отменены. Предполагая, что элементы в вашем массиве не будут менять позицию вообще, тогда вы можете просто сохранить выбранную позицию как int в ваших предпочтениях.

Сохранить:

int selectedPosition = yourSpinner.getSelectedItemPosition();
editor.putInt("spinnerSelection", selectedPosition);
editor.apply();

Загрузить:

yourSpinner.setSelection(prefs.getInt("spinnerSelection",0));

Если элементы в вашем массиве будут меняться, вам придется хранить фактическую строку вместо позиции. Примерно так будет работать:

String selectedString = yourArray[yourSpinner.getSelectedItemPosition()];
editor.putString("spinnerSelection", selectedString);
editor.apply();

и

найти положение строки, просматривая ваш массив и проверяя массив [i] по значению, сохраненному в prefs. Затем позвоните yourSpinner.setSelected(position). Если вместо этого вы используете ArrayList, эту часть можно выполнить без цикла, вызвав

ArrayList.indexOf(prefs.getString("spinnerSelection", ""));

Имейте в виду, что только ArrayList имеет метод indexOf();. На обычном массиве вы не можете использовать метод indexOf();, вам придется вручную искать ваш массив, чтобы найти правильное значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...