Как проверить, отображается ли элемент в адаптере RecyclerView после асинхронного обратного вызова - PullRequest
0 голосов
/ 28 июня 2019

Я хочу обновить один элемент, вызывающий асинхронный вызов API сервера внутри onBindViewHolder. Я отправляю товар в позиции + позиция в обратный вызов. Ответный вызов поступает через 20 секунд в функцию обратного вызова. В функцию обратного вызова возвращается ответ и позиция. Тогда я звоню notifyItemChanged(pos, response). А внутри полезной нагрузки onBindViewHolder я обновляю элемент на эту позицию и его вид. Проблема заключается в том, что если асинхронный запрос занимает 20 секунд, и пользователь будет быстро прокручивать RecyclerView, он обновит неправильный элемент View, потому что это представление в позиции может быть несвязанным или связанным с другим элементом из списка.

Есть ли способ, как отследить, какой элемент в какой позиции не связан для отмены запроса? Я должен обновить эту информацию после того, как адаптер будет создан, потому что, если я сделаю это раньше, пользователь не будет видеть ни одного элемента recyclerView в течение почти 2 минут, пока мой список не будет готов. (только этот один звонок занимает столько времени).

Ответы [ 2 ]

0 голосов
/ 28 июня 2019

Я не уверен в вашем вопросе, но вы можете работать над своими вещами прямо в вашем адаптере.Затем вы делаете:

Adapter adapter = new BaseAdapter(newDataset);
recyclerView.setAdapter(adapter);
recyclerView.notifyDataSetChanged();

В противном случае, если вы действительно работаете с представлениями, а не с набором данных, вы можете сделать это: в вашем адаптере:

  • создать массив представлений
  • создать пользовательскую функцию View getViewAtPos (int pos)
  • проверить, виден ли ваш вид в текущем просмотре прокрутки ( здесь )
0 голосов
/ 28 июня 2019

Я бы не стал передавать позицию в качестве контекста.Я бы передал идентификатор.Может быть внутренним целым числом как id или чем-то еще.Затем вы можете легко определить, какие идентификаторы в настоящее время видны на экране, и посмотреть, содержит ли этот список идентификатор обратного вызова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...