setContentView和LayoutInflater有什么区别?

时间:2013-07-23 10:54:53

标签: android layout xml-parsing android-lifecycle layout-inflater

我正在创建一个包含多个片段的标签列表。 我注意到,在主要活动中,我使用setContentView来获取布局xml并使用findViewById来获取相应的UI元素配置。

setContentView(R.layout.fragment_tabs);
mTabHost = (TabHost)findViewById(android.R.id.tabhost);
mTabHost.setup();
mTabManager = new TabManager(this, mTabHost, android.R.id.tabcontent);

但是,在不同的片段类中,我必须使用inflater。

View v = inflater.inflate(R.layout.webview, container, false);
WebView myBrowser=(WebView)v.findViewById(R.id.mybrowser);

这两个函数都用于获取布局xml来创建一个对象,为什么会有区别?第一个是在onCreate期间使用,第二个是在onCreateView期间使用吗?在什么情况下我应该选择其中任何一个?

1 个答案:

答案 0 :(得分:27)

setContentView仅适用于Activity方法。每个Activity都提供了FrameLayout,其ID为"@+id/content"(即内容视图)。您在setContentView中指定的任何视图都是该Activity的视图。请注意,您还可以将视图实例传递给此方法,例如setContentView(new WebView(this));您正在使用的方法版本将在幕后为您充气。

另一方面,片段有一个名为onCreateView的生命周期方法,它返回一个视图(如果有的话)。最常见的方法是用XML扩展视图并在此方法中返回它。在这种情况下,你需要自己充气。片段没有setContentView方法