Отображать в виде массива

328
06 января 2017, 09:43

Есть метод, где я сохраняю значения нажатого элемента в моём recyclerView:

    private void saveFavorites(int position) {
    String name = personCategories.get(position);
    SharedPreferences sp = getActivity().getPreferences(Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = sp.edit();
    editor.putString(Constants.KEY_SP, name);
    editor.apply();
}

После чего получаю данные в другом фрагменте следующим образом:

    private String getFavorites() {
    SharedPreferences sp = getActivity().getPreferences(Context.MODE_PRIVATE);
    return sp.getString(Constants.KEY_SP, null);
}

Загвоздка в том, что я получаю лишь один какой-то элемент, на который нажал последнем в списке. Как сделать так, чтобы он отображался в виде массива? И все элементы, на которые я нажал, добавлялись во второй фрагмент?

Answer 1

Как вариант попробуйте Ваши строки преобразовать и сохранить в json в методе saveFavorites с помощью библиотеки gson.

После этого получите Ваши строки JSON в методе getFavorites.

Хороший пример описан здесь. Надеюсь поможет.

Answer 2

Как вариант, используйте getStringSet/putStringSet.
В первом фрагменте код усложнится, надо будет считать, добавить и перезаписать набор строк.

Answer 3

Сохраняется только последнее значение, так как Вы сохраняете все значения с одним ключом и, соответственно, последующая запись перезаписывает предыдущую.

Как (плохой) вариант, можете сохранять список значений, а не одно значение.

Но, вообще говоря, SharedPreferences не предназначены для хранения подобного рода данных, о чем Вам уже много раз тут говорили.

Answer 4

public class DataManager { //пример синглтона

private static List<Data> mDataList;
private static SettingsDataManager sInstance;
private DataManager() {
}
public static DataManager getInstance() {

    if (sInstance == null) {
        synchronized (DataManager.class) {
            mInstance = new DataManager();
        }
    }
    return sInstance;
}

public void saveData(List<Data> data) {
    mDataList = data;
}
public List<Data> restoreData() {
 return mDataList;
}

}

Answer 5

А что мешает создать синглтоном отдельный класс, который будет хранить эти данные, и любой другой фрагмент или адаптер, или что угодно смогут к нему обратиться, а внутри хранить любые коллекции?

READ ALSO
spring boot internationalization без jsp

spring boot internationalization без jsp

собственно можно ли юзать интернационализацию через набор файлов с ресурсами без jsp? в частности интересует angular 2если да, то можно пожалуйста...

385
Помогите пож с JSON в android

Помогите пож с JSON в android

Сделал запрос к серверуОн возвращает ответ:

304
Ошибка: [Running, pool size = 5, active threads = 5, queued tasks = 128, completed tasks = 0]

Ошибка: [Running, pool size = 5, active threads = 5, queued tasks = 128, completed tasks = 0]

Проверяю кучу файлов (>1000) на наличие их на FireBase StorageДля проверки регистрирую Listener:

451
JasperReports вывести в Excel числа как числа

JasperReports вывести в Excel числа как числа

Привет! Есть SpringMVC проект, есть данные, которые по клику на кнопку выкачиваются в Excel файл

444