Od programisty Androida ( Tworzenie list i kart ):
Widżet RecyclerView to bardziej zaawansowana i elastyczna wersja ListView.
Ok, to brzmi świetnie, ale kiedy zobaczyłem ten przykładowy obraz, bardzo się zdezorientowałem co do różnicy między tymi dwoma.
Powyższe zdjęcie można łatwo utworzyć za ListView
pomocą niestandardowego adaptera.
Więc w jakiej sytuacji należy skorzystać RecyclerView
?
android
listview
android-recyclerview
Blaze Tama
źródło
źródło
Odpowiedzi:
RecyclerView
został stworzony jakoListView
ulepszenie, więc tak, możesz utworzyć załączoną listę zListView
kontrolą, ale korzystanieRecyclerView
jest łatwiejsze, ponieważ:Ponownie wykorzystuje komórki podczas przewijania w górę / w dół - jest to możliwe dzięki implementacji View Holder w
ListView
adapterze, ale było to opcjonalne, podczas gdy wRecycleView
domyślnym sposobie pisania adaptera.Oddziela listę od kontenera - dzięki czemu można łatwo umieszczać elementy listy w czasie wykonywania w różnych kontenerach (linearLayout, gridLayout) z ustawieniem
LayoutManager
.Przykład:
ItemAnimator
.Jest więcej na temat
RecyclerView
, ale myślę, że te kwestie są najważniejsze.Podsumowując,
RecyclerView
jest to bardziej elastyczna kontrola do obsługi „danych listy”, która podąża za wzorcami przekazywania obaw i pozostawia sobie tylko jedno zadanie - recykling elementów.źródło
Aby widoki listy miały dobrą wydajność, musisz zaimplementować wzorzec uchwytu, i łatwo to zepsuć, szczególnie gdy chcesz zapełnić listę kilkoma różnymi rodzajami widoków.
RecyclerView wypala ten wzór, co utrudnia zepsucie. Jest również bardziej elastyczny, ułatwiając obsługę różnych układów, które nie są proste liniowe, jak siatka.
źródło
ListView
jest przodkiemRecyclerView
. Było wiele rzeczy, któreListView
albo nie działały, albo nie działały dobrze. JeśliListView
miałbyś uzupełnić niedociągnięcia i rozwiązać problem, dzieląc problemy na różne domeny, uzyskałbyś coś w rodzaju widoku recyklera. Oto główne problemy z ListViews:Nie wymuszał
View
ponownego użycia dla tych samych typów elementów (spójrz na jeden z adapterów używanych w aListView
, jeśli przestudiujesz metodę getView, zobaczysz, że nic nie stoi na przeszkodzie, aby programista utworzył nowy widok dla każdego wiersza, nawet jeśli zostanie przekazany przezconvertView
zmienną)Nie zapobiegło to kosztownym
findViewById
zastosowaniom (nawet jeśli przetwarzałeś widoki, jak wspomniano powyżej, możliwe było, że deweloperzy dzwonili, abyfindViewById
zaktualizować wyświetlaną zawartość widoków potomnych. Głównym celemViewHolder
wzorcaListViews
było buforowaniefindViewById
połączeń. Jednak było to tylko dostępne, jeśli o tym wiesz, ponieważ w ogóle nie była częścią platformy)Obsługiwane tylko przewijanie w pionie z widokami wyświetlanymi w wierszu (widok Recycler nie przejmuje się tym, gdzie widoki są umieszczane i jak są przenoszone, jest on abstrakcyjny jako a
LayoutManager
. Recycler może zatem obsługiwać tradycyjne,ListView
jak pokazano powyżej, a także takie rzeczy jakGridView
, ale nie jest to ograniczone, może zrobić więcej, ale musisz wykonać pracę programistyczną, aby tak się stało).Animacje do dodania / usunięcia nie były rozważanym przypadkiem użycia. Od Ciebie zależało, jak sobie z tym poradzić (porównaj RecyclerView. Klasy adapterów powiadomiły * oferty metod v. ListViews, aby uzyskać pomysł).
Krótko mówiąc,
RecyclerView
jest to bardziej elastyczne podejścieListView
, aczkolwiek może być konieczne więcej kodowania z twojej strony.źródło
Odpowiedź pochodzi od Antonio leiva
RecyclerView
jest rzeczywiściepowerful view
niżListView
. Aby uzyskać więcej informacji, odwiedź tę stronę .źródło
Poniżej przedstawiono kilka kluczowych punktów / różnic między RecyclerView i ListView. Mądrze odbieraj połączenia.
źródło
Główna zaleta:
ViewHolder
nie jest domyślnie dostępny wListView
. Będziemy tworzyć jawnie wewnątrzgetView()
.RecyclerView
ma wbudowaneViewholder
.źródło
Oprócz powyższych różnic jest jeszcze kilka innych:
RV oddziela tworzenie widoku i wiązanie danych do wyświetlenia. W LV musisz sprawdzić, czy convertView ma wartość NULL czy nie, aby utworzyć widok, zanim powiążesz z nim dane. Tak więc, w przypadku RV, widok zostanie utworzony tylko wtedy, gdy jest potrzebny, ale w przypadku LV można przeoczyć kontrolę konwersji i utworzy widok za każdym razem.
Przełączanie między tabelą a listą jest teraz łatwiejsze dzięki narzędziu LayoutManager.
Nie trzeba powiadamiać i aktualizować wszystkich elementów, nawet jeśli zmieni się tylko jeden element.
W przypadku LV należało wdrożyć buforowanie widoku. Domyślnie jest dostarczany w RV. (Istnieje różnica między buforowaniem widoku a recyklingiem.)
Bardzo łatwe animacje przedmiotów w przypadku kampera.
źródło
Zalety RecyclerView w porównaniu do widoku listy:
Domyślnie zawiera ViewHolder.
Łatwe animacje.
Obsługuje układy poziome, siatkowe i schodkowe
Zalety listy Widok w porównaniu do recyklera Widok:
Łatwy do dodania dzielnik.
Może używać wbudowanego adaptera tablicowego do prostych list prostych
Obsługuje nagłówek i stopkę.
Obsługuje OnItemClickListner.
źródło
recyclerView.addItemDecoration(new DividerItemDecoration(getContext(), LinearLayoutManager.VERTICAL));
po zrobieniu czegoś takiegorecyclerView = view.findViewById(R.id.feed);
8 różnic między RecyclerView i ListView
1. ViewHolder Pattern
Wzorzec używany do ograniczenia wywołań findViewById () metod .
W ListView możesz łatwo zbudować listę bez użycia ViewHolder. Ale nie w przypadku RecyclerView.
2. Adapter
Oba są AdapterViews, tak. Działa w oparciu o klasę adaptera.
ListView można łatwo zbudować przy użyciu domyślnych adapterów, takich jak ArrayAdapter, CursorAdapter, ale RecyclerView zapewnia klasę RecyclerView.Adapter, aby utworzyć nową niestandardową klasę adaptera.
Nie można używać ArrayAdapter ani żadnego innego wbudowanego adaptera z RecyclerView.
3. Rozmieszczenie przedmiotów
Stworzyłem Vertical ListView w prostym i mniejszym kodzie. Ale co, jeśli musimy utworzyć GridView?
RecyclerView używa LayoutManager do układania swoich elementów. Istnieją 3 klasy LayoutManager.
Animacje
ListView nie ma podstawowych animacji. RecyclerView ma jednak proste animacje.
Rozdzielacz
Android: dzielnik i android: dividerHeight atrybutów lub setDivider (), setDividerHeight () pozwala na wykonywanie niestandardowych dzielnik w ListView.
od 25.1.0 można użyć klasy DividerItemDecoration, aby utworzyć prosty dzielnik.
Kliknij Wydarzenia
RecyclerView nie ma OnItemClickListener , tak, to bardzo smutne. Dają jednak większą kontrolę programistom, udostępniając RecyclerView.OnItemTouchListener.
Metody powiadomień
Musisz wywołać odpowiednie metody powiadomień *, aby wykonać prawidłowe animacje. RecylcerView ma wiele metod powiadomień * w porównaniu z ListView.
źródło
Myślę, że główną i największą różnicą, jaką mają, jest to, że
ListView
szuka pozycji przedmiotu podczas jego tworzenia lub umieszczania, z drugiej stronyRecyclerView
szuka rodzaju przedmiotu. jeśli istnieje inny element utworzony z tego samego typuRecyclerView
, nie tworzy go ponownie. Pyta najpierw o adapter, a następnie pyta o pulę recyklingu, jeśli pula recyklingu mówi „tak, stworzyłem podobny typ”, toRecyclerView
nie próbuje utworzyć tego samego typu.ListView
nie ma tego rodzaju mechanizmu łączenia.źródło
Moim zdaniem
RecyclerView
podjęto próbę rozwiązania problemu z wzorcem recyklingu stosowanym w widokach list, ponieważ utrudniało to życie programistom. Wszystko inne, z czym mógłbyś sobie poradzić mniej więcej. Na przykład mogę używać tego samego adaptera pod kątemListView
iGridView
to nie ma znaczenia w obu poglądówgetView
,getItemCount
,getTypeCount
służy więc jest to samo.RecyclerView
nie jest potrzebne, jeśliListView
zListAdapter
lubGridView
z adapterami sieciowymi już działa. Jeśli poprawnie zaimplementowałeśViewHolder
wzorzec w widokach listy, nie zobaczysz żadnej znaczącej poprawyRecycleView
.źródło
Pracowałem trochę
RecyclerView
i nadal wolęListView
.Jasne, oba używają
ViewHolders
, więc nie jest to zaleta.A
RecyclerView
jest trudniejszy w kodowaniu.A
RecyclerView
nie zawiera nagłówka i stopki, więc jest minusem.A
ListView
nie wymaga tworzenia ViewHolder. W przypadkach, gdy chcesz mieć listę z sekcjami lub podtytułami, dobrym pomysłem byłoby tworzenie niezależnych elementów (bez ViewHoldera), jest to łatwiejsze i nie wymaga oddzielnych klas.źródło
Jeśli więc zależy Ci na wydajności, to tak, dobrym pomysłem jest zastąpienie ListView RecyclerView.
źródło
Prosta odpowiedź: powinieneś używać RecyclerView w sytuacji, gdy chcesz pokazać wiele przedmiotów, a ich liczba jest dynamiczna. ListView należy stosować tylko wtedy, gdy liczba elementów jest zawsze taka sama i jest ograniczona do rozmiaru ekranu.
Trudniej, bo myślisz tylko z myślą o bibliotece na Androida.
Obecnie istnieje wiele opcji, które pomagają budować własne adaptery, ułatwiając tworzenie list i siatek dynamicznych elementów, które można wybierać, zmieniać kolejność, używać animacji, dzielników, dodawać stopki, nagłówki itp.
Nie bój się i spróbuj RecyclerView, możesz zacząć go kochać, tworząc listę 100 elementów pobranych z Internetu (np. Wiadomości z Facebooka) w ListView i RecyclerView, zobaczysz różnicę w UX (użytkownik doświadczenie) podczas próby przewijania prawdopodobnie aplikacja testowa zatrzyma się, zanim będzie można to zrobić.
Zalecam sprawdzenie tych dwóch bibliotek w celu tworzenia łatwych adapterów:
FastAdapter autorstwa mikepenz
FlexibleAdapter autorstwa davideas
źródło
RecyclerView info
RecyclerView
Został wprowadzonyAndroid 5.0 (Lollipop)
. jest zawarty w bibliotece pomocy technicznej . Dlatego jest kompatybilny z Android API API Poziom 7.Podobnie jak w przypadku
ListView
,RecyclerView’s
główną ideą jest dostarczenie wystawianie funkcjonalność w spektaklu przyjazny sposób. Części „Recycler” w tym widoku nie ma przypadku.RecyclerView
Może faktycznie recyklingu przedmiotów, z którymi aktualnie pracują. Proces recyklingu odbywa się dzięki wzorowi o nazwie View Holder .Plusy i minusy RecyclerView
Plusy:
Cons:
Informacje o widoku listy
ListView
Istnieje od samego początku Androida. Był dostępny nawet wAPI Level 1
i ma ten sam cel coRecyclerView
.Korzystanie z ListView jest naprawdę bardzo proste. W tym aspekcie nie jest podobny do następcy. Krzywa uczenia się jest płynniejsza niż w przypadku RecyclerView. Dzięki temu łatwiej jest pojąć. Nie musimy zajmować się takimi rzeczami, jak LayoutManager, ItemAnimator czy DiffUtil.
Plusy i minusy ListView
Plusy:
ExpandableListView
Cons:
źródło
Istnieje wiele różnic między ListView i RecyclerView, ale należy pamiętać o następujących kwestiach:
źródło