私はいくつかの断片でタブリストを作成しています。 私は主なアクティビティで、setContentView
を使用してレイアウトxmlを取得し、findViewById
を使用して対応するUI要素の設定を取得していることに気付きました。setContentViewとLayoutInflaterの違い
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
の間の2番目の使用ですか?どんな状況で私はどちらかを選ぶべきですか?
回答ありがとうございます。また、findViewByIdの前にxmlファイルを取得してそのオブジェクトを作成する必要がありますか?私はオフィシャルドキュメンテーションでいくつかの例を見つけたので、そうではありません。例えばEditText editText =(EditText)findViewById(R.id.email_address); – user782104
私は質問を完全に理解しているかどうか分からないので、私の答えが理にかなっていなければ、もう一度質問してください。アクティビティとビューにはどちらもfindViewById()というメソッドがあります。アクティビティバージョンでは、コンテンツビュー内に指定されたIDを持つビューが検索されます(したがって、内部的にはcontentView.findViewById()が呼び出されます)。これは、contentViewが使用可能になる前に設定する必要があることを意味します。 "setContentView"と同様に、フラグメントには "findViewById"のメソッドがありません(コンテンツビューがないため意味があります)。代わりに、getView()。findViewById()を使用してください。 –
'setContentView'に代わるものとして、アクティビティで' LayoutInflater.inflate'を使うことはできません。 –