Выбор счетчика - сохранить в SharedPreferences, затем получить

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

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

-Кнопка для активации сохранения значений в 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);
}

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


person Devin    schedule 21.02.2011    source источник


Ответы (1)


Вы должны вызвать 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();, вам придется вручную искать в массиве, чтобы найти правильное значение.

person FoamyGuy    schedule 21.02.2011
comment
Я думаю, что это должно быть spinner.setSelection(position) (spinner.setSelected требует логического - person tanni tanna; 11.04.2018