Jak uzyskać układ Inflater na podstawie kontekstu?


226

Piszę niestandardową implementację ListAdapter.

W jego konstruktorze pobieram kontekst, identyfikator zasobu (tj. R.id.xxx reprezentujący plik układu) oraz listę i mapę (te zawierają dane).

Problem polega na tym, że będę potrzebować LayoutInflater, aby uzyskać obiekt View znajdujący się w osobnym pliku XML układu.

Jak mogę zdobyć LayoutInflater, mając tylko kontekst?

Teraz myślę, że jest to możliwe, ponieważ jest to dość podobne do tego, co jest przekazywane do konstruktora ArrayAdapter (kontekst, zasób, textViewResourceId, tablica danych), i uważam, że ArrayAdapter musi również użyć LayoutInflater podany tylko kontekst.

Ale jak to zrobić?

Odpowiedzi:


515

Możesz użyć static from()metody z LayoutInflaterklasy :

 LayoutInflater li = LayoutInflater.from(context);

11
Dzięki! Próbowałem znaleźć Context.getSomething (). getAnotherThing (). getLayoutInflater ()!
Edwin Lee,

To jedyna metoda, która zadziałała dla mnie. Co drugi, którego do tej pory próbowałem, zgłaszał wyjątek.
num1

4
Czy uzyskanie inflatora jest drogie za każdym razem, gdy jest to potrzebne, co oznacza, czy uważasz, że powinniśmy uratować członka inflatora?
AlikElzin-kilaka

BTW, myślę, że powinniśmy użyć LayoutInflater li = (LayoutInflater) context.getSystemService (Context.LAYOUT_INFLATER_SERVICE), ponieważ ostatecznie LayoutInflater.from (kontekst) robi to samo w środku.
Ankur Chaudhary

3
Który jest lepszy? Ten z 270 głosami lub ten z ponad 25 głosami
DJphy

53

Możesz także użyć tego kodu, aby uzyskać LayoutInflater:

LayoutInflater li = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)

40
Jaka jest różnica między LayoutInflater.from (Context ctx) a tym getSustemService (...)?
Teo Choong Ping

8
+1, na ładne pytanie, w implementacji metody LayoutInflater.from (kontekst) wywołuje także kontekst.getSystemService (), aby pobrać LayoutInflater Service Provider z System Managera. Więc może mieć różnicę śmieci w stosie wywołań.
NguyenDat

11
LayoutInflater.from (kontekst) generuje również błąd, jeśli nie można odzyskać inflatora: tutaj kod: publiczny statyczny LayoutInflater z (Kontekst kontekstu) {LayoutInflater LayoutInflater = (LayoutInflater) context.getSystemService (Context.LAYOUT_INFLATER_SERVICE); if (LayoutInflater == null) {wyrzuć nowy AssertionError („Nie znaleziono LayoutInflater.”); } return LayoutInflater; }
Hiep,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.