Добавление элемента в избранное без использования БД
Есть приложение, в котором реализован вывод элементов в RecyclerView. Данные в него выводятся из json из папки assets. Хочу реализовать добавление некоторых элементов в избранное, но использовать базу для этого не хочу, т.к. количество элементов небольшое. Какие есть способы это реализовать. Первое что в голову пришло это добавить в json новый пункт и заполнить его нулями, а при добавлении в избранное заменять 0 на 1. Правильный ли это способ или что-то получше можно придумать?
Ответы (1 шт):
насколько я знаю вы не можете изменить программно файл из assets
если не хотите использовать бд, то попробуйте хранить данные например в SharedPreferences
например создать функцию
public static void setFavor(Context context, String key, boolean value) {
if (context != null && context.getPackageName() != null && PreferenceManager.getDefaultSharedPreferences(context) != null) {
PreferenceManager.getDefaultSharedPreferences(context).edit().putBoolean(key, value).commit();
}
}
и записывать туда id элементов json
setFavor(context, "favor_"+id, true);
и так же читать
public static boolean isFavor(Context context, String key) {
if (context != null && context.getPackageName() != null && PreferenceManager.getDefaultSharedPreferences(context) != null) {
return PreferenceManager.getDefaultSharedPreferences(context).getBoolean(key, false);
} else return false;
}
boolean mIsFavor = isFavor(context, "favor_"+id);
Дополнил
Полностью удалить переменную SharedPreferences можно так
public static boolean deletePref(Context context, String key) {
if (context != null && context.getPackageName() != null && PreferenceManager.getDefaultSharedPreferences(context) != null) {
return PreferenceManager.getDefaultSharedPreferences(context).edit().remove(key).commit();
}
return false;
}
deletePref(context, "favor_" + id);
Для удаления всех "избранных" можно использовать цикл, его же можно переделать что бы вывести все переменные "избранных"
public static void deleteAllPrefStartWith(Context context, String template) {
Map<String, ?> keys = PreferenceManager.getDefaultSharedPreferences(context).getAll();
for (Map.Entry<String, ?> entry : keys.entrySet()) {
String key = entry.getKey();
if (key.startsWith(template)) {
deletePref(context, key);
}
}
}
deleteAllPrefStartWith(context, "favor_");