Во-первых, вам, вероятно, не следует загружать список избранных из настроек каждый раз, когда вы хотите запросить или изменить список. Вместо этого, запросите его один раз, когда будет создано действие, к которому принадлежит RecyclerView (вы можете сделать это из самого адаптера или из действия), и сохраните его в глобальной переменной. то есть:
class SomeActivity extends Activity {
private ArrayList<OrderModel> favorites = new ArrayList<>();
private SharedPreference prefsHelper = new SharedPreference();
@Override
public void onCreate(Bundle savedInstanceState) {
//....
favorites.addAll(prefsHelper.loadFavorites(this));
}
}
Затем, когда вы захотите что-то изменить, измените этот ArrayList и сохраните его напрямую:
public void addFavorite(OrderModel model) {
favorites.add(model);
prefsHelper.storeFavorites(this, favorites);
}
Возможно, вам придется изменить это, чтобы соответствовать вашему коду, но это пример того, что делать.
То, что у вас есть, не будет работать, потому что каждый раз, когда вы изменяете список, вы воссоздаете его из представления String. Это означает, что список избранного, который вы загрузили, содержит совершенно разные экземпляры моделей, даже если они содержат одинаковые значения.
Когда вы передаете OrderModel своему методу removeFavorite()
, он ничего не удалит, потому что ничто не равно; перезагрузив список, вы получите совершенно новые экземпляры.
Если вы действительно хотите сохранить текущую структуру кода, переключитесь на индексы вместо передачи объекта. Или переопределите equals()
в OrderModel и попросите его вручную сравнить значения, чтобы можно было сопоставить даже разные экземпляры.