É possível fazer o ListView
horizontalmente? Fiz isso usando uma visualização de galeria, mas o item selecionado chega ao centro da tela automaticamente. Não quero o item selecionado no mesmo local em que cliquei. Como posso corrigir este problema? Minha idéia era definir o ListView
com um pergaminho horizontal. Compartilhe sua ideia?
android
listview
gallery
horizontal-scrolling
Praveen
fonte
fonte
Respostas:
De acordo com a documentação do Android,
RecyclerView
é a nova maneira de organizar os itens na exibição de lista e ser exibida horizontalmenteVantagens:
Mais informações sobre
RecyclerView
:Amostra:
survivingwithandroid.com
Basta adicionar o bloco abaixo para fazer a
ListView
horizontal da verticalFragmento de código
fonte
Paul não se preocupa em corrigir erros de sua biblioteca ou aceitar correções de usuários. É por isso que estou sugerindo outra biblioteca que tem funcionalidade semelhante:
https://github.com/sephiroth74/HorizontalVariableListView
Atualização : em 24 de julho de 2013, o autor (sephiroth74) lançou a versão completamente reescrita com base no código do Android 4.2.2 ListView. Devo dizer que não possui todos os erros que a versão anterior possuía e funciona muito bem!
fonte
A resposta @Paul está vinculada a uma ótima solução, mas o código não permite o uso de onClickListeners em itens filhos (as funções de retorno de chamada nunca são chamadas). Estou lutando há um tempo para encontrar uma solução e decidi postar aqui o que você precisa modificar nesse código (no caso de alguém precisar).
Em vez de substituir a
dispatchTouchEvent
substituiçãoonTouchEvent
. Use o mesmo códigodispatchTouchEvent
e exclua o método (você pode ler a diferença entre os dois aqui http://developer.android.com/guide/topics/ui/ui-events.html#EventHandlers )Em seguida, adicione o código a seguir que decidirá roubar o evento dos filhos do item e entregá-lo ao nosso
onTouchEvent
, ou permitir que ele seja tratado por eles.Por fim, não se esqueça de declarar as variáveis em sua classe:
fonte
Desde que o Google introduziu a Android Support Library v7 21.0.0, você pode usar o RecyclerView para rolar os itens horizontalmente. O widget RecyclerView é uma versão mais avançada e flexível do ListView.
Para usar o RecyclerView, basta adicionar dependência:
Aqui está uma amostra:
Mais informações sobre o RecyclerView:
fonte
Isso é um pouco (muito) atrasado, mas estou postando isso no caso de alguém aparecer mais tarde.
A Biblioteca de suporte da pré-visualização do Android L tem
RecyclerView
exatamente o que você deseja.No momento, você só pode obtê-lo através do SDK de visualização L e precisa configurá-lo
minSdk
comoL
. Mas você pode copiar todos os arquivos necessários para o seu projeto e usá-los dessa maneira até L sair oficialmente.Você pode fazer o download dos documentos de visualização aqui .
Aviso: A API do Recycler View pode mudar e pode ter erros.
Atualizada
O código fonte da visualização em lista horizontal é:
fonte
LinearLayoutManager
- veja aqui: stackoverflow.com/questions/28460300/…Faça o download do arquivo jar aqui
Agora, coloque-o na pasta libs, clique com o botão direito do mouse e selecione 'Adicionar como biblioteca'
agora em main.xml coloque esse código
agora na classe Activity, se você quiser o Horizontal Listview com imagens, coloque este código
fonte
Na verdade, é muito simples : basta girar a exibição da lista para ficar de lado
mlistView.setRotation(-90);
Depois de inflar os filhos, isso deve estar dentro do método getView. você gira as crianças para ficar em pé:
Editar: se o seu ListView não se encaixar corretamente após a rotação, coloque o ListView dentro deste RotateLayout da seguinte maneira:
fonte
Minha solução é simplesmente usar o
ViewPager
widget. Ele não é travado centralmenteGallery
e possui recursos internos para reciclagem de visualizações (asListView
). Você pode ver uma abordagem semelhante no aplicativo Google Play sempre que lida com listas roláveis horizontalmente.Você só precisa estender
PagerAdapter
e executar alguns ajustes lá:Como resultado, você terá um widget de rolagem horizontal com adaptador, assim:
fonte
Nota: O Android agora suporta exibições de lista horizontais usando o RecyclerView, agora esta resposta foi preterida, para obter informações sobre o RecyclerView: https://developer.android.com/reference/android/support/v7/widget/RecyclerView
Eu desenvolvi uma lógica para fazer isso sem usar nenhuma biblioteca de rolagem horizontal externa. Aqui está a visualização horizontal que eu obtive e publiquei minha resposta aqui: https://stackoverflow.com/a/33301582/5479863
Minha resposta json é esta:
Arquivo de layout:
arquivo de classe:
O truque que está funcionando aqui é o ID que eu atribuí ao ImageView "imgView.setId (v)" e, depois disso, aplique onClickListener e estou novamente buscando o ID da exibição .... Também comentei dentro do código para que é fácil de entender, espero que isso seja muito útil ... Happy Coding ... :)
fonte
getPixelsToDP()
?Isso não é muita resposta, mas que tal usar uma Visualização de rolagem horizontal ?
fonte
Você pode usar o RecyclerView na biblioteca de suporte. RecyclerView é uma versão generalizada do ListView que suporta:
Reciclador Android Visualizar documentos
fonte
Pesquisei bastante uma solução para esse problema. A resposta curta é que não existe uma boa solução, sem substituir métodos privados e esse tipo de coisa. A melhor coisa que encontrei foi implementá-lo do zero, estendendo-o
AdapterView
. É muito infeliz. Veja minha pergunta SO sobre ListViews horizontais .fonte
fillListDown()
método, você precisa acompanhar a borda inferior do último item da lista. Mas você não sabe onde está essa borda até criar o último item (adapter.getCount () - 1). Então, você espera até que esse item seja criado e pode armazenar a localização da borda. Depois que você souber disso, verifique se mListTop nunca é menor que 0 e nunca maior que a altura da lista.Eu tive que fazer o mesmo em um dos meus projetos e acabei escrevendo o meu também. Eu o chamei HorzListView agora faz parte da minha biblioteca Aniqroid de código aberto .
http://aniqroid.sileria.com/doc/api/ (procure por downloads na parte inferior ou use o projeto de código do google para ver mais opções de download: http://code.google.com/p/aniqroid/downloads/list )
A documentação da classe está aqui: http://aniqroid.sileria.com/doc/api/com/sileria/android/view/HorzListView.html
fonte
Para o meu aplicativo, eu uso um HorizontalScrollView contendo LinearLayout dentro, com orientação definida como horizontal. Para adicionar imagens dentro, eu crio ImageViews dentro da atividade e as adiciono ao meu LinearLayout. Por exemplo:
E isso funciona perfeitamente bem para mim. Na atividade, tudo o que tenho a fazer é algo como o código abaixo:
Como eu disse, isso funciona para mim e espero que ajude alguém que também queira alcançar isso.
fonte
bem, você sempre pode criar suas visualizações de texto etc. dinamicamente e definir seus onclicklisteners como faria com um adaptador
fonte
O HorizontialListView não pode funcionar quando os dados no adaptador estão envolvidos em outro encadeamento. Tudo é executado 100% no thread da interface do usuário. Esse é um grande problema no multithread. Acho que usar o HorizontialListView não é a melhor solução para o seu problema. O HorzListView é a melhor maneira. Você substitui a Galeria anterior pelo HorzListView. Você não precisa modificar o código do adaptador . stackoverflow.com/a/12339708/1525777 sobre o HorzListView.
fonte
Eu tinha usado o link listview horizontal no meu projeto e obtive bons resultados. Eu tinha sido usado inicialmente na biblioteca devsmart, mas isso me causou alguns problemas. Então, a melhor maneira de usar o link de visualização horizontal como ele recuperou meus problemas e também iniciei recentemente meu aplicativo no Google PlayStore usando esta biblioteca e obtive uma ótima resposta dos usuários. Por isso, recomendo que você use a mesma biblioteca que mencionei acima para mostrar o listview horizontalmente. Aproveitar :)
fonte
Existe uma ótima biblioteca para isso, chamada TwoWayView , que é muito fácil de implementar, basta incluir a biblioteca do projeto no seu espaço de trabalho e adicioná-la como um projeto de biblioteca ao seu projeto original e, em seguida, seguir as seguintes etapas originalmente mencionadas aqui :
Então,
e finalmente, apenas declare-o e lide com ele como qualquer outro regular
ListView
:Todos os métodos de
ListView
trabalharão aqui como de costume, mas há apenas uma diferença que notei: quando o modo de escolhasetChoiceMode
éint
definido , o método não assume um valor, mas um valorenum
chamadoChoiceMode
, assimlist_view.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
serálvTest.setChoiceMode(ChoiceMode.SINGLE); // or MULTIPLE or NONE
.fonte
Você pode usar o ViewFlipper para incluir o XML do layout e adicionar imagens, listview para cada XML do layout
fonte