Правильный способ реализации 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.Adapter
to
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). Пожалуйста, воздержитесь от возвращения значения, которые не являются стабильными. (Стабильное значение будет уникальным значением, которое не изменяется, даже если изменяется позиция набора данных)