Preciso saber quais elementos estão atualmente exibidos no meu RecyclerView. Não há equivalente ao OnScrollListener.onScroll(...)
método em ListViews. Eu tentei trabalhar View.getGlobalVisibleRect(...)
, mas esse hack é muito feio e nem sempre funciona também.
Alguém tem alguma idéia?
android
android-recyclerview
rekire
fonte
fonte
getItemCount
pode retornar 1 efindFirstVisibleItemPosition
-1 na mesma chamada.Por fim, encontrei uma solução para saber se o item atual está visível, no evento onBindViewHolder no adaptador.
A chave é o método isViewPartiallyVisible do LayoutManager.
No seu adaptador, você pode obter o LayoutManager no RecyclerView, que você obtém como parâmetro no evento onAttachedToRecyclerView .
fonte
para aqueles que têm uma lógica a ser implementada dentro do adaptador RecyclerView, você ainda pode usar a abordagem @ernesto combinada com um on scrollListener para obter
what you want
como o RecyclerView é consultado. Dentro do adaptador, você terá algo parecido com isto:fonte
Você pode usar
recyclerView.getChildAt()
para obter cada filho visível, e definir alguma tagconvertview.setTag(index)
nessas visualizações no código do adaptador ajudará você a relacioná-lo com os dados do adaptador.fonte
recyclerView.getChildAt()
, é assim que geralmenteRecyclerView
funciona.RecyclerView
tentará manter apenas algumas visualizações secundárias que estão visíveis no momento (ou seja, dentro dos limites da tela, não Visibilidade como INTEIRA, INVISÍVEL) e tentará reciclar essas visualizações quando o usuário rolar.Adendo :
As funções propostas FindLast ... Posição () que não funcionam corretamente em um cenário com uma barra de ferramentas em colapso, enquanto a barra de ferramentas é expandida.
Parece que a visão do reciclador tem uma altura fixa e, enquanto a barra de ferramentas é expandida, o reciclador é movido para baixo, parcialmente fora da tela. Como conseqüência, os resultados das funções propostas são muito altos. Exemplo: Diz-se que o último item visível é o nº 9, mas, na verdade, o item 7 é o último que está na tela.
Esse comportamento também é a razão pela qual minha visão frequentemente falhava ao rolar para a posição correta, ou seja, scrollToPosition () não funcionava corretamente (finalmente fechei a barra de ferramentas programaticamente).
fonte
Os
Linear / Grid LayoutManager
métodos a seguir podem ser usados para verificar quais itens estãovisible
e se você deseja rastrear
is item visible on screen
algum limite, consulte o blog a seguir.https://proandroiddev.com/detecting-list-items-perceived-by-user-8f164dfb1d05
fonte
Para
StaggeredGridLayoutManager
fazer isso:E para obter visualizações de itens visíveis:
Lembre-se de verificar se está vazio.
fonte
viewsIds
é uma matriz e pode estar vazia.