web-dev-qa-db-ja.com

setContentViewとLayoutInflaterの違いは何ですか?

いくつかのフラグメントを含むタブリストを作成しています。メインアクティビティで、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);

ただし、別のフラグメントクラスでは、代わりにインフレータを使用する必要があります。

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

そして、両方の関数を使用して、オブジェクトを作成するためのレイアウトxmlを取得しますが、なぜ違いがあるのですか?最初のものはonCreateの間に使用され、2番目のものはonCreateViewの間に使用されますか?どのような状況で私はそれらのどちらかを選ぶべきですか?

25
user782104

setContentViewActivityメソッドのみです。各Activityには、ID _"@+id/content"_(つまり、コンテンツビュー)のFrameLayoutが提供されます。 setContentViewで指定するビューは、そのActivityのビューになります。ビューのインスタンスをこのメソッドに渡すこともできることに注意してください。 setContentView(new WebView(this));使用しているメソッドのバージョンは、舞台裏でビューを膨らませます。

一方、フラグメントには、ビューを返すonCreateViewというライフサイクルメソッドがあります(ビューがある場合)。これを行う最も一般的な方法は、XMLでビューを拡張し、このメソッドで返すことです。この場合、あなたはそれを自分で膨らませる必要があります。フラグメントにはsetContentViewメソッドがありません

28