Gostaria de garantir que a lista seja rolada até o final, depois de atualizar a exibição da lista usando o listAdapter, para exibir o último elemento inserido na lista. Como posso fazer isso ?
Eu tentei isso, mas sem sorte:
lv.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);
obrigado
Respostas:
Supondo que você saiba quando os dados da lista foram alterados, você pode manualmente dizer à lista para rolar até o final, definindo a seleção da lista para a última linha. Algo como:
fonte
Você precisa usar estes parâmetros em sua exibição de lista:
Rolagem
lv.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);
Coloque o cabeçalho da lista no final
lv.setStackFromBottom(true);
Você também pode definir esses parâmetros em XML, por exemplo. como isso:
fonte
Uma combinação de TRANSCRIPT_MODE_ALWAYS_SCROLL e setSelection fez com que funcionasse para mim
fonte
Consegui usar isso em resposta a um clique no botão, então acho que você também pode usá-lo depois de atualizar seu conteúdo:
fonte
Para obter isso em um ListFragment:
Adicionada esta resposta, porque se alguém fizer uma pesquisa no google pelo mesmo problema com o ListFragment, ele simplesmente encontrará isso.
Saudações
fonte
Usando: Coloque o cabeçalho da lista na parte inferior
lv.setStackFromBottom(true);
Trabalhou para mim e a lista é rolada para baixo automaticamente quando é trazida à visibilidade pela primeira vez. A lista então rola como deveria
TRANSCRIPT_MODE_ALWAYS_SCROLL
.fonte
eu uso
para adicionar entradas na parte inferior, e as entradas mais antigas rolam para cima, como uma transcrição de bate-papo
fonte
getListView().smoothScrollToPosition(getListAdapter.getCount() - 1);
no início para rolar para a parte inferior no início da atividade.A solução mais simples é:
fonte
O modo de transcrição é o que você deseja e é usado pelo Google Talk e pelo aplicativo SMS / MMS. Você está chamando corretamente notifyDatasetChanged () no seu adaptador quando adiciona itens?
fonte