У меня есть два RecyclerView. В первом (CategoriesRV) отображаются категории, а в другом (ElementsRV) элементы этих категорий. При добавлении элементов в ElementsRV сразу задаются категории из CategoriesRV.
Допустим, в CategoriesRV добавлено 3 категории, а в ElementsRV десяток элементов, каждый из которых привязан к той или иной категории. В CategoriesRV реализовано удаление категорий. Я удаляю одну из них, но в ElementsRV продолжает отображаться эта удалённая категория. В момент удаления из CategoriesRV необходимо "дёргать" метод из ElementsRV для очистки упоминаний об удалённой категории.
Пока додумался только до такой реализации:
Метод из адаптера CategoriesRV
private void deleteCategory() {
CategoryModel currentCategory = categoryModels.get(getAdapterPosition());
SharedPreferences spCategories = context.getSharedPreferences("spCategories",
Context.MODE_PRIVATE);
spCategories.edit().remove(currentCategory.getCategoryId()).apply();
categoryModels.remove(currentCategory);
Toast.makeText(context, R.string.preset_deleted,
Toast.LENGTH_LONG).show();
notifyDataSetChanged();
ElementsRV.deleteItem(context);
}
ElementsRV.deleteItem(context) - метод из адаптера ElementsRV:
public static void deleteItem(Context context){
SharedPreferences sp = context.getSharedPreferences("spCategories", Context.MODE_PRIVATE);
for (int i = 0; i < recipesModelList.size(); i++){
if (!sp.contains(recipesModelList.get(i).getCategoryName())){
recipesModelList.get(i).setCategoryName("");
recipesModelList.get(i).setCategoryBtnColor(0);
recipesModelList.get(i).setCategoryTextColor(0);
notifyItemChanged(i); // Non-static method 'notifyItemChanged(int)' cannot be referenced from a static context
}
}
}
Проблема в том, что notifyItemChanged() не может вызываться из статичного метода. Как быть в этой ситуации?
UPD: Проблема с доступом решена. Теперь появился другой вопрос. Во вьюшке элемента из ElementsRV есть пометка о привязанной категории. Методы, написанные ниже, её убирают только из файла SharedPrefences, а на самой вьюхе после удаления остаётся. Пропадает только при повтороном входе в это активити. Пробовал и notifyDataSetChanged(), и notifyItemChanged().
CategoriesRV
private void deleteCategory() {
CategoryModel currentCategory = categoryModels.get(getAdapterPosition());
SharedPreferences spCategories = context.getSharedPreferences("spCategories",
Context.MODE_PRIVATE);
spCategories.edit().remove(currentCategory.getCategoryId()).apply();
categoryModels.remove(currentCategory);
Toast.makeText(context, R.string.preset_deleted,
Toast.LENGTH_LONG).show();
notifyDataSetChanged();
ElementsRV erv = new ElementsRV ();
erv.deleteItem(context, currentCategory.getCategoryName(), recipesAdapter);
}
ElementsRV
public void deleteItem(Context context, String categoryName, ElementsRV erv){
SharedPreferences.Editor spRecipes;
for (int i = 0; i < recipesModelList.size(); i++){
if (recipesModelList.get(i).getCategoryName().equals(categoryName)){
spRecipes = context.getSharedPreferences(recipesModelList.get
(i).getName(), Context.MODE_PRIVATE).edit();
spRecipes.putString("categoryName", "");
spRecipes.putInt("categoryBtnColor", 0);
spRecipes.putInt("categoryTextColor", 0);
spRecipes.apply();
recipesModelList.get(i).setCategoryName("");
recipesModelList.get(i).setCategoryBtnColor(0);
recipesModelList.get(i).setCategoryTextColor(0);
}
}
erv.notifyDataSetChanged();
}
Скрин:
метод static
принадлежит классу, он не понимает, у какого объекта надо вызвать notifyItemChanged
поэтому нужно либо передать ссылку на объект класса ElementsRV:
ElementsRV.deleteItem(context, elementsRV);
elementsRV это экземпляр класса ElementsRV
public static void deleteItem(Context context, ElementsRV erv){
SharedPreferences sp = context.getSharedPreferences("spCategories", Context.MODE_PRIVATE);
for (int i = 0; i < recipesModelList.size(); i++){
if (!sp.contains(recipesModelList.get(i).getCategoryName())){
recipesModelList.get(i).setCategoryName("");
recipesModelList.get(i).setCategoryBtnColor(0);
recipesModelList.get(i).setCategoryTextColor(0);
erv.notifyItemChanged(i); // Non-static method 'notifyItemChanged(int)' cannot be referenced from a static context
}
}
}
Либо всё-таки сделать deleteItem не статическим и тогда всё будет работать правильно
elementsRV.deleteItem(context);
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Пример кода из файла(сначала идет описание города, потом идет описание станций в этом городе):
Нужно создать сортировку массива методом пузырька, когда пузырек "тонет" (с конца массива до начала, НЕ сортировка по убыванию) В чем проблема?...
ЗдравствуйтеНужно поизучать Jira и возможности работы с ней из вне
Как собрать все значение data-url="/af54359643" используя OpenQASelenium ? Пытаюсь разобраться в документации, там есть метод FindElements, но судя по всему, он значения...