В чем разница между setContentView и LayoutInflater?
Я создаю список вкладок с несколькими фрагментами.
Я заметил, что в основном действии я использовал setContentView
для получения макета xml и использования findViewById
для получения соответствующей конфигурации элемента пользовательского интерфейса.
setContentView(R.layout.fragment_tabs);
mTabHost = (TabHost)findViewById(android.R.id.tabhost);
mTabHost.setup();
mTabManager = new TabManager(this, mTabHost, android.R.id.tabcontent);
Однако, в другом классе фрагментов я должен использовать вместо этого надуватель.
View v = inflater.inflate(R.layout.webview, container, false);
WebView myBrowser=(WebView)v.findViewById(R.id.mybrowser);
И обе функции используются для получения макета xml для создания объекта, почему существует разница? Используется ли первый во время onCreate
, а второй - во время onCreateView
? В какой ситуации я должен выбрать любой из них?
Ответы
Ответ 1
setContentView
- это только метод Activity
. Каждому Activity
предоставляется FrameLayout
с идентификатором "@+id/content"
(т.е. Вид содержимого). Какой бы вид, который вы указали в setContentView
, не будет отображаться для этого Activity
. Обратите внимание, что вы также можете передать экземпляр представления этому методу, например. setContentView(new WebView(this));
Версия метода, который вы используете, будет завышать представление за кулисами.
Фрагменты, с другой стороны, имеют метод жизненного цикла, называемый onCreateView
, который возвращает представление (если оно есть). Наиболее распространенный способ сделать это - раздуть представление в XML и вернуть его в этом методе. В этом случае вам нужно раздуть его самостоятельно. Фрагменты не имеют метода setContentView