コンテキストを指定してレイアウトインフレーターを取得する方法は?


226

ListAdapterのカスタム実装を書いています。

そのコンストラクターでは、コンテキスト、リソースID(つまり、レイアウトファイルを表すR.id.xxx)、リストとマップ(これらにはデータが含まれています)を取り込みます。

ここでの問題は、別のレイアウトXMLファイルにあるViewオブジェクトを取得するためにLayoutInflaterが必要になることです。

コンテキストのみを指定してLayoutInflaterを取得するにはどうすればよいですか?

これが可能だと思う理由は、これがArrayAdapterのコンストラクター(コンテキスト、リソース、textViewResourceId、データ配列)に渡されるものと非常に似ているためです。また、ArrayAdapterも、コンテキストのみが指定されたLayoutInflater。

しかし、どうすればできるのでしょうか?

回答:


515

クラスstatic from()メソッドLayoutInflaterを使用できます。

 LayoutInflater li = LayoutInflater.from(context);

11
ありがとう!Context.getSomething()。getAnotherThing()。getLayoutInflater()を見つけようとしました!
エドウィンリー

これが私にとって有効な唯一の方法です。私がこれまでに試した他のすべてのものは例外を投げました。
num1 2011年

4
必要になるたびにインフレーターを入手するのは費用がかかりますか、つまり、インフレーターのメンバーを保存する必要があると思いますか?
AlikElzin-kilaka 2014年

ところで、LayoutInflater li =(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)を使用する必要があると思います。
Ankur Chaudhary、2015年

3
270票の投票と25以上の投票のどちらが良いですか
DJphy

53

このコードを使用して、LayoutInflaterを取得することもできます。

LayoutInflater li = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)

40
LayoutInflater.from(Context ctx)とこのgetSustemService(...)の違いは何ですか?
Teo Choong Ping

8
+1、いい質問ですが、メソッドLayoutInflater.from(context)の実装では、システムマネージャーからLayoutInflaterサービスプロバイダーを取得するためにcontext.getSystemService()も呼び出します。したがって、コールスタックにごみの違いがある可能性があります。
NguyenDat 2012年

11
LayoutInflater.from(context)は、インフレーターを取得できない場合にもエラーをスローします。ここでは、コード:public static LayoutInflater from(Context context){LayoutInflater LayoutInflater =(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); if(LayoutInflater == null){throw new AssertionError( "LayoutInflater not found。"); } LayoutInflater;を返します。}
2012
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.