Почему RecyclerView.ViewHolder.getAdapterPosition () возвращает -1? - PullRequest
0 голосов
/ 21 октября 2019

Я успешно реализовал RecyclerView и недавно столкнулся с дополнительным вариантом использования при удалении некоторых элементов из представления.

Я передаю держатель представления методу RecyclerView.ViewHolder viewHolder и затем обращаюсь к методу ViewHolder getAdapterPosition() вроде так:

int position = viewHolder.getAdapterPosition();

Проблема в том, что после вызова этого несколько раз. (После удаления нескольких предметов.) Он устанавливает позицию как -1. Я знаю это из-за журналов. Я также знаю, что при удалении первого элемента проблем не возникает и вызывается notifyDataSetChanged().

Является ли это еще одним конкретным методом обновления, который может гарантировать, что позиция никогда не будет возвращена как -1, кроме встроенной проверки?

ОБНОВЛЕНИЕ: getAdapterPosition() возвращал NO_POSITIONпотому что проход макета не произошел с момента последнего вызова notifyDataSetChanged(). Использование getLayoutPosition() решает проблему возврата -1.

1 Ответ

0 голосов
/ 21 октября 2019

Элемент видоискателя удален.

# getAdapterPosition () return: Позиция адаптера элемента, если он все еще существует в адаптере. NO_POSITION, если элемент был удален из адаптера,

, где NO_POSITION = -1

https://developer.android.com/reference/android/support/v7/widget/RecyclerView.ViewHolder.html#getAdapterPosition()

...