Preciso descobrir a posição de pixel de um elemento em uma lista que foi exibida usando um ListView
. Parece que eu deveria pegar um dos TextView e então usar getTop()
, mas não consigo descobrir como obter uma visão secundária de um ListView
.
Atualização: Os filhos de ViewGroup
não correspondem 1 a 1 com os itens da lista, para a ListView
. Em vez disso, os ViewGroup
filhos de correspondem apenas às visualizações que estão visíveis no momento. Portanto, getChildAt()
opera em um índice que é interno ao ViewGroup
e não tem necessariamente nada a ver com a posição na lista que o ListView
usa.
fonte
firstPosition
deve serint firstPosition = listView.getFirstVisiblePosition() - listView.getHeaderViewsCount();
consertar isso.ListView
já está manipulando a "movimentação" das visualizações filhas após reciclar programas antigosconvertView
, etc., portanto, você pode ter certeza de queListView.getChildAt(0)
é de fato a primeira visualização anexada do adaptador. Pode não estar totalmente visível (e pode nem mesmo ser visível, dependendoListView
do limite de "visibilidade" de antes de reciclar uma visualização que considera "rolada para fora da visualização")Este código é mais fácil de usar:
fonte
Uma pesquisa rápida dos documentos da classe ListView revelou os métodos getChildCount () e getChildAt () herdados de ViewGroup. Você pode iterar por meio deles usando isso? Não tenho certeza, mas vale a pena tentar.
Encontrei aqui
fonte
Basicamente, crie dois Drawables - um transparente e outro da cor desejada. Solicite o foco na posição clicada (
int position
conforme definido) e altere a cor da referida linha. Em seguida, percorra o paiListView
e altere todas as outras linhas de acordo. Isso contabiliza quando um usuário clicalistview
várias vezes. Isso é feito com um layout personalizado para cada linha noListView
. (Muito simples, basta criar um novo arquivo de layout com umTextView
- não defina focalizável ou clicável!).Nenhum adaptador personalizado necessário - use
ArrayAdapter
fonte
fonte
Isso pressupõe que você conhece a posição do elemento no ListView:
Em seguida, você deve poder chamar getLeft () e getTop () para determinar os elementos na posição da tela.
fonte
getView()
é chamado internamente pelo ListView, ao preencher a lista. Você não deve usá-lo para obter a visualização nessa posição na lista, pois chamargetView()
com null paraconvertView
faz com que o adaptador aumente uma nova visualização do recurso de layout do adaptador (não obtém a visualização que já está sendo exibida).