2015-01-18 3 views
3

В чем разница между получением ссылки на виджете, как это:Разница между LayoutInflater.inflate и findViewById

TableRow row = findViewById(R.id.table_row); 

и:

TableRow row = (TableRow)LayoutInflater.from(this).inflate(R.layout.table_row, null); 

Есть ли также разница, когда TableRow является корень его макета или его небольшая часть макета?

ответ

3

Какая разница ...

Первый из них извлечения существующего виджета в пределах вашей деятельности.

Второй читает в XML-файле и создает новые виджетов. Второй из них также несколько ошибочен, поскольку вы редко используете LayoutInflater.from() (обычно вы используете getLayoutInflater() на Activity), и вы редко хотите использовать этот вариант inflate() (если вы не предоставляете родительский контейнер, ресурсы макета с корнем RelativeLayout элемент будет ошибочным).

Есть ли разница, когда TableRow является корнем его компоновки или его малой частью макета?

Да. Разница такая же, как и раньше: извлечение существующего виджета или создание нового.

3

1) Использование

TableRow row = findViewById(R.id.table_row); 

вы просто получить ссылку наView с идентификатором R.id.table_row, который уже создан и раздувается в текущей раскладке (где текущий означает макет Activtiy или View, который вы определяете).

2) Использование

TableRow row = (TableRow)LayoutInflater.from(this).inflate(R.layout.table_row, null); 

Вы накачивания (что означает создание) новой иерархии представлений, основанных на определении XML, содержащейся в R.layout.table_row. Поскольку вы не передаете родительский параметр View в методе inflate(), вам нужно будет добавить полученную иерархию вручную в существующий контейнер.