Правильный способ реализации getItemId() в RecyclerView.Адаптер
у меня есть универсальный класс
public abstract class BaseAdapter<T> extends RecyclerView.Adapter {
private List<T> itemsList = new ArrayList<>();
//other override methods
@Override
public long getItemId(int position) {
return position;
}
}
каков правильный способ реализации getItemId ()? Я думаю, что return position как и во многих примерах, неверно.
2 ответов
-
создайте базовый интерфейс, который имеет метод, возвращающий тип
longнапример.interface BaseInterface{ long getId(); } -
изменить
abstract class BaseAdapter<T> extends RecyclerView.Adapterto
abstract class BaseAdapter<T extends BaseInterface> extends RecyclerView.Adapter {Примечание: подпись изменена на
T extends BaseInterface -
заменить
@Override public long getItemId(int position) { return position; }С
@Override public long getItemId(int position) { return itemsList.get(position).getId(); }
в списке вы можете вернуть только идентификатор элемента, доступного в определенной строке, как указано в документах Google:
getItemId
получить идентификатор строки связано с указанной позицией в списке.
но это не так с RecyclerView, в RecyclerView вы должны убедиться, что вы либо возвращаете уникальный идентификатор для каждого элемента, либо в случае отсутствия стабильного идентификатора вы должны вернуть RecyclerView.NO_ID (-1). Пожалуйста, воздержитесь от возвращения значения, которые не являются стабильными. (Стабильное значение будет уникальным значением, которое не изменяется, даже если изменяется позиция набора данных)