1: plik LayoutInflater
Pobiera pliki XML układu i tworzy różne obiekty widoku z jego zawartości.
2: Adaptery są zbudowane w celu ponownego wykorzystania widoków, gdy widok jest przewijany, tak że nie jest już widoczny, można go użyć do jednego z pojawiających się nowych widoków. Ten ponownie użyty widok to convertView
. Jeśli ta wartość jest zerowa, oznacza to, że nie ma widoku z recyklingu i musimy utworzyć nowy, w przeciwnym razie powinniśmy go użyć, aby uniknąć tworzenia nowego.
3: parent
jest dostarczany, abyś mógł zawyżać swój widok w celu uzyskania odpowiednich parametrów układu.
Wszystko to razem może posłużyć do efektywnego tworzenia widoku, który pojawi się na Twojej liście (lub innym widoku, który pobiera adapter):
public View getView(int position, @Nullable View convertView, ViewGroup parent){
if (convertView == null) {
//We must create a View:
convertView = inflater.inflate(R.layout.my_list_item, parent, false);
}
//Here we can do changes to the convertView, such as set a text on a TextView
//or an image on an ImageView.
return convertView;
}
Zwróć uwagę na użycie LayoutInflater
, który parent
może być użyty jako argument, i jak convertView
jest używany ponownie.
getView()
Sposób Adapter jest dla widoku elementu wytwarzającego Of AListView
,Gallery
...LayoutInflater
jest używana do pobierania widoku obiektów, które można zdefiniować w xml układu (obiekt główny, normalnieLinearLayout
,FrameLayout
lubRelativeLayout
)convertView
służy do recyklingu. Powiedzmy, że masz widok listy, który może wyświetlać tylko 10 pozycji na raz, a obecnie wyświetla element 1 -> element 10. Kiedy przewiniesz w dół o jeden element, element 1 zniknie z ekranu i zostanie wyświetlony element 11 . Aby wygenerować widok dla elementu 11, zostanie wywołana metoda getView (), aconvertView
tutaj jest widok elementu 1 (który nie jest już potrzebny). Więc zamiast tego utwórz nowy obiekt widoku dla pozycji 11 (co jest kosztowne), dlaczego nie użyć go ponownieconvertView
? => po prostu sprawdzamy, czyconvertView
jest null, czy nie, jeśli null tworzy nowy widok, w przeciwnym razie użyj go ponownieconvertView
.parentView
jest ListView lub Galeria ... która zawiera widok elementu, którygetView()
generuje.Uwaga : nie wywołujesz tej metody bezpośrednio, wystarczy ją zaimplementować, aby poinformować widok nadrzędny, jak wygenerować widok elementu.
źródło
Możesz rzucić okiem na ten film o widoku listy. To z zeszłego roku Google IO i nadal najlepszy przegląd widoków list w moim umyśle.
http://www.youtube.com/watch?v=wDBM6wVEO70
Wypełnia układy (pliki xml w twoim folderze res / layout /) do obiektów java, takich jak LinearLayout i inne widoki.
Spójrz na wideo, zapewni Ci aktualne informacje o tym, do czego służy widok konwersji, w zasadzie jest to widok z recyklingu, który czeka na ponowne użycie, aby uniknąć tworzenia nowego obiektu i spowolnienia przewijania listy.
Umożliwia odwoływanie się do widoku listy z karty.
źródło
Podczas projektowania w języku XML wszystkie elementy interfejsu użytkownika to tylko tagi i parametry. Zanim będziesz mógł użyć tych elementów UI (np. TextView lub LinearLayout), musisz utworzyć rzeczywiste obiekty odpowiadające tym elementom xml. Do tego służy inflater. Nadmuchiwacz używa tych tagów i odpowiadających im parametrów do tworzenia rzeczywistych obiektów i ustawiania wszystkich parametrów. Następnie możesz uzyskać odwołanie do elementu UI za pomocą findViewById ().
To jest interesujące. Widzisz, getView () jest wywoływana za każdym razem, gdy rysowana jest pozycja na liście. Teraz, zanim element będzie można narysować, należy go utworzyć. Teraz convertView jest w zasadzie ostatnim widokiem używanym do rysowania elementu. W getView () najpierw wypełniasz xml, a następnie używasz findByViewID (), aby uzyskać różne elementy interfejsu użytkownika elementu listitem. Kiedy sprawdzamy (convertView == null) to, co robimy, to sprawdzanie, czy widok jest pusty (dla pierwszego elementu), a następnie go tworzymy, w przeciwnym razie, jeśli już istnieje, użyj go ponownie, nie ma potrzeby ponownego przechodzenia przez proces inflacji . Sprawia, że jest o wiele bardziej wydajny.
Musiałeś również natknąć się na koncepcję ViewHolder w getView (). Dzięki temu lista jest bardziej wydajna. Tworzymy element widoku i przechowujemy odniesienie do wszystkich elementów interfejsu użytkownika, które otrzymaliśmy po zawyżeniu. W ten sposób możemy uniknąć wywoływania licznych funkcji findByViewId () i zaoszczędzić dużo czasu. Ten ViewHolder jest tworzony w warunku (convertView == null) i jest przechowywany w convertView przy użyciu metody setTag (). W pętli else otrzymujemy go z powrotem za pomocą metody getView () i używamy go ponownie.
Element nadrzędny to ViewGroup, do którego ostatecznie dołączony jest widok utworzony przez getView (). Teraz w twoim przypadku byłby to ListView.
Mam nadzieję że to pomoże :)
źródło
Inflator układu rozszerza się / dodaje zewnętrzny kod XML do bieżącego widoku.
getView () jest wywoływana wiele razy, w tym podczas przewijania. Więc jeśli widok jest już zawyżony, nie chcemy tego robić ponownie, ponieważ nadmuchiwanie jest kosztownym procesem ... dlatego sprawdzamy, czy jest zerowy, a następnie nadmuchujemy.
Widok nadrzędny to pojedyncza komórka Twojej listy.
źródło
LayoutInflater
służy do generowania dynamicznych widoków XML dlaListView
elementu lub wonCreateView
fragmentu.ConvertView
jest zasadniczo używany do odtwarzania widoków, których aktualnie nie ma w widoku. Powiedz, że masz element przewijanyListView
. Podczas przewijania w dół lub w góręconvertView
wyświetla widok, który został przewinięty. To ponowne użycie oszczędza pamięć.Parametr nadrzędny
getView()
metody zawiera odwołanie do układu nadrzędnego, który ma listView. Załóżmy, że chcesz uzyskać identyfikator dowolnego elementu w nadrzędnym pliku XML, którego możesz użyć:źródło
getView()
utwórz nowyView
lubViewGroup
dla każdego wierszaListview
lub Spinner. Możesz to zdefiniowaćView
lubViewGroup
wLayout XML
pliku wres/layout
folderze i podać odniesienie do niegoAdapter
klasy Object.jeśli masz 4 elementy w tablicy przekazanej do adaptera.
getView()
metoda utworzy 4 widoki dla 4 rzędów Adaper.Klasa LayoutInflater ma metodę inflate (), która tworzy obiekt widoku z układu zasobów XML.
źródło
Przydatne informacje na temat getView można również znaleźć w interfejsie adaptera w pliku Adapter.java. To mówi;
źródło