gridView com diferentes tamanhos de células, estilo pinterest

fundo

GridView é uma classe que se estendeAdapterView , o que significa que ele mostra células em um estilo de grade de forma eficiente, reciclando exibições antigas para serem mostradas como novas quando o usuário as rola.

O problema

Às vezes, você deseja obter uma interface do usuário especial, que se assemelha a interface do usuário do Windows Phone Tiles, com células de tamanhos diferentes em cima uns dos outros.

Algo assim:

AABB
AACC
AADD
AADD

cada letra representa uma parte de sua célula, então a célula A é 2x4, a célula B e a célula C tomam 2x1 cada, e a célula D é 2x2.

Pode ser ainda mais do que isso, onde a célula D terminou um pouco acima do que eu mostrei, e logo abaixo dela há outra célula, então o final de D e o final de A não são necessariamente alinhados.

Um exemplo de aplicativo que tem esse estilo épinterest .

GridView não permite tal coisa.

Na verdade, todas as soluções que tentei têm problemas. Gostaria de perguntar se existem outras alternativas ou soluções melhores.

O que eu encontrei

Existem várias maneiras de lidar com esse problema:

Como uma classe que se estendeAdapterView GridView tem a capacidade de ter um tipo para cada item (usando oBaseAdapter), que permitiria definir como o layout da célula.

No entanto, isso ainda limita você, já que você obterá linhas de itens, uma abaixo da outra. você tem que tê-los alinhados.

GridLayout é um layout relativamente novo e é bastante flexível. O Google publicou uma boa biblioteca de compatibilidade, suportando API7 e acima.

No entanto, ele não usa nenhuma reciclagem de visualizações, por isso é uma má escolha, caso você deseje exibir muitos itens.

Se você tiver muitos itens, precisará criar todas as visualizações para eles.

Biblioteca QuiltView - estende de GridLayout, então basicamente tem o mesmo problema como ele.

StaggeredGridView - parece o mais promissor, mas tem muitos bugs, especialmente quando muda de orientação. esses erros incluem células vazias, rolagem incorreta e NPEs (raras, mas ainda acontecem). Eu também não tenho certeza se ele suporta ter células personalizadas em vez de imageViews sozinho.

outras soluções, como mençõesAqui .

A questão

Alguém sabe de outra alternativa para este problema? Talvez algumas soluções para algumas das soluções que mostrei?

EDIT: Eu acho que sobre StaggeredGridView, a rolagem e exceções podem ser resolvidos usando um ImageView normal que você defina seu tamanho dentro do getView. Eu acho que a razão para isso funcionar de uma maneira estranha é que a amostra atualiza o tamanho da imageview depois que ela foi carregada da Internet.

No entanto, problema de células vazias ainda permanece nesta biblioteca. não só isso, mas seus tamanhos mudam muito, mesmo sem alterar a orientação.

EDIT: por enquanto, eu acho que a melhor solução é usar,Biblioteca do PinterestLikeAdapterView.

não tem nenhum problema que eu possa encontrar.

no entanto, ele não pode fazer com que os itens ocupem mais de uma largura de célula. é muito bom mesmo assim.

EDIT: infelizmente, tem problemas com notifyDataSetChanged. eu relatei sobre issoAqui.

questionAnswers(3)

yourAnswerToTheQuestion