Як отримати надувний макет з урахуванням контексту?


226

Я пишу власну реалізацію ListAdapter.

У його конструкторі я беру Context, ідентифікатор ресурсу (тобто R.id.xxx, що представляє файл макета), а також список і карту (вони містять дані).

Тепер проблема полягає в тому, що мені знадобиться LayoutInflater, щоб отримати об'єкт View, який знаходиться в окремому файлі XML-макета.

Як я можу влаштувати LayoutInflater, наданий лише контексту?

Тепер, чому я думаю, що це можливо, це те, що це досить схоже на те, що передається конструктору ArrayAdapter (контекст, ресурс, textViewResourceId, масив даних), і я вважаю, що ArrayAdapter також повинен використовувати LayoutInflater заданий лише контекстом.

Але як це можна зробити?

Відповіді:


515

Ви можете використовувати static from()метод з LayoutInflaterкласу :

 LayoutInflater li = LayoutInflater.from(context);

11
Дякую! я намагався знайти Context.getSomething (). getAbodyThing (). getLayoutInflater ()!
Едвін Лі

Це єдиний метод, який працював на мене. Кожен інший, який я намагався поки що, кинув виняток.
num1

4
Чи дорого діставати надувні кожен раз, коли це потрібно, це означає, ви думаєте, ми повинні врятувати члена надувного?
AlikElzin-kilaka

BTW, я думаю, ми повинні використовувати LayoutInflater li = (LayoutInflater) context.getSystemService (Context.LAYOUT_INFLATER_SERVICE), оскільки в кінцевому підсумку LayoutInflater.from (контекст) робить те саме всередині.
Анкур Чадхарі

3
Яка краща ?? та, яка має 270 голосів, або 25+ голосів
DJphy

53

Ви також можете використовувати цей код, щоб отримати LayoutInflater:

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

40
Яка різниця між LayoutInflater.from (Context ctx) і цією getSustemService (...)?
Тео Чонг Пінг

8
+1, для приємного питання, реалізуючи метод LayoutInflater.from (контекст), також зателефонуйте на context.getSystemService (), щоб отримати постачальника послуг LayoutInflater від System Manager. Можливо, в стеку викликів буде різниця в посліді.
NguyenDat

11
LayoutInflater.from (контекст) також викидає помилку, якщо надувний не вдасться отримати: тут код: загальнодоступний статичний LayoutInflater з (контекст контексту) {LayoutInflater LayoutInflater = (LayoutInflater) context.getSystemService (Context.LAYOUT_INFLATER_SER) if (LayoutInflater == null) {киньте новий AssertionError ("LayoutInflater не знайдено."); } повернути LayoutInflater; }
Hiep
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.