gridView z różnymi rozmiarami komórek, styl pinterest

tło

GridView to klasa, która się rozszerzaAdapterView , co oznacza, że ​​skutecznie pokazuje komórki w stylu siatki, przetwarzając stare widoki, aby były wyświetlane jako nowe, gdy użytkownik je przewija.

Problem

Czasami chciałbyś uzyskać specjalny interfejs użytkownika, który przypomina interfejs Windows Phone Tiles, mając komórki o różnych rozmiarach jeden na drugim.

Coś takiego:

AABB
AACC
AADD
AADD

każda litera reprezentuje część swojej komórki, więc komórka A to 2x4, komórka B i komórka C mają po 2x1, a komórka D to 2x2.

Może to być nawet więcej, gdy komórka D skończy się nieco powyżej tego, co pokazałem, a tuż pod nią znajduje się inna komórka, więc koniec D i koniec A nie są konieczne wyrównane.

przykładem aplikacji, która ma ten styl jestpinterest .

GridView nie pozwala na takie rzeczy.

W rzeczywistości każde rozwiązanie, którego próbowałem, ma problemy. Chciałbym zapytać, czy są jakieś inne alternatywy lub lepsze rozwiązania.

Co znalazłem

Istnieje wiele sposobów na rozwiązanie tego problemu:

Jako klasa, która się rozszerzaAdapterView GridView ma możliwość posiadania typu dla każdego przedmiotu (za pomocąBaseAdapter), które pozwolą Ci ustawić sposób rozmieszczenia komórki.

Jednak nadal cię to ogranicza, ponieważ otrzymasz rzędy przedmiotów, jeden pod drugim. musisz je dopasować.

GridLayout jest stosunkowo nowym układem i jest dość elastyczny. Google opublikował dla niego ładną bibliotekę kompatybilności, obsługującą API7 i wyżej.

Jednak nie wykorzystuje żadnego recyklingu widoków, więc jest to zły wybór, jeśli chcesz pokazać wiele przedmiotów.

Jeśli masz dużo przedmiotów, musisz utworzyć dla nich wszystkie widoki.

Biblioteka QuiltView - rozciąga się od GridLayout, więc w zasadzie ma taki sam problem.

StaggeredGridView - wygląda najbardziej obiecująco, ale ma wiele błędów, zwłaszcza przy zmianie orientacji. takie błędy obejmują puste komórki, złe przewijanie i NPE (rzadkie, ale nadal się zdarzają). Nie jestem też pewien, czy obsługuje niestandardowe komórki zamiast samych imageView.

inne rozwiązania, jak wspomnianotutaj .

Pytanie

Czy ktoś zna inną alternatywę dla tego problemu? Może jakieś obejścia dla któregokolwiek z rozwiązań, które pokazałem?

EDYCJA: Myślę, że o StaggeredGridView, przewijanie i wyjątki można rozwiązać, używając normalnego ImageView, który ustawiasz jego rozmiar wewnątrz getView. Myślę, że powodem, dla którego działał w dziwny sposób, jest to, że próbka aktualizuje rozmiar obrazu po załadowaniu go z Internetu.

Jednak w tej bibliotece nadal pozostaje problem z pustymi komórkami. nie tylko to, ale ich rozmiary bardzo się zmieniają, nawet bez zmiany orientacji.

EDIT: na razie myślę, że najlepszym rozwiązaniem jest użycie,Biblioteka PinterestLikeAdapterView.

nie ma żadnych problemów, które mogę znaleźć.

nie może jednak spowodować, że przedmioty będą miały więcej niż 1 szerokość komórki. mimo to jest bardzo dobra.

EDYCJA: niestety ma problemy z notifyDataSetChanged. donoszę o tymtutaj.

questionAnswers(3)

yourAnswerToTheQuestion