Как получить макет Inflater с учетом контекста?

226

Я пишу пользовательскую реализацию ListAdapter.

В его конструкторе я беру контекст, идентификатор ресурса (т.е. R.id.xxx, представляющий файл макета), а также список и карту (они содержат данные).

Теперь проблема в том, что мне понадобится LayoutInflater, чтобы получить объект View, который находится в отдельном XML-файле макета.

Как мне получить LayoutInflater только с учетом контекста?

Теперь, почему я думаю, что это возможно, это то, что это очень похоже на то, что передается в конструктор ArrayAdapter (context, resource, textViewResourceId, массив данных), и я полагаю, что ArrayAdapter также должен использовать LayoutInflater предоставляется только в контексте.

Но как это сделать?

Эдвин Ли
источник

Ответы:

515

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

 LayoutInflater li = LayoutInflater.from(context);
Дэйв Уэбб
источник
11
Спасибо! я пытался найти Context.getSomething (). getAnotherThing (). getLayoutInflater ()!
Эдвин Ли
Это единственный метод, который работал для меня. Любой другой, который я пробовал до сих пор, исключение.
num1
4
Дорого ли получать инфлятор каждый раз, когда это необходимо, то есть, вы думаете, мы должны спасти члена инфлятора?
АликЭльзин-килака
Кстати, я думаю, что мы должны использовать LayoutInflater li = (LayoutInflater) context.getSystemService (Context.LAYOUT_INFLATER_SERVICE), поскольку в конечном итоге LayoutInflater.from (context) делает то же самое внутри.
Анкур Чаудхари
3
Какой лучше - тот, у кого 270 голосов, или тот, у кого 25+ голосов
DJphy
53

Вы также можете использовать этот код для получения LayoutInflater:

LayoutInflater li = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)
NguyenDat
источник
40
В чем разница между LayoutInflater.from (Context ctx) и этим getSustemService (...)?
Тео Чунг Пинг
8
+1, для хорошего вопроса, при реализации метода LayoutInflater.from (context) также вызовите context.getSystemService (), чтобы получить поставщика услуг LayoutInflater из System Manager. Так что может быть различие в мусоре в стеке вызовов.
NguyenDat
11
LayoutInflater.from (context) также выдает ошибку, если инфлятор не может быть получен: здесь код: public static LayoutInflater from (Context context) {LayoutInflater LayoutInflater = (LayoutInflater) context.getSystemService (Context.LAYOUT_INFLATER_SERVICE); if (LayoutInflater == null) {throw new AssertionError ("LayoutInflater not found."); } return LayoutInflater; }
Hiep