インポートする必要があるもの、またはアクティビティ以外の場所でレイアウトインフレータを呼び出す方法
public static void method(Context context){
//this doesn't work the getLayoutInflater method could not be found
LayoutInflater inflater = getLayoutInflater();
// this also doesn't work
LayoutInflater inflater = context.getLayoutInflater();
}
アクティビティでのみgetLayoutInflater
を呼び出すことができますが、それは制限ですか?カスタムダイアログを作成し、そのビューを膨らませたい場合、またはサービスから表示されるカスタムビューでトーストメッセージを表示したい場合、アクティビティのないサービスのコンテキストのみが必要な場合しかし、私はカスタムメッセージを表示したい。
アクティビティクラスにないコード内の場所にインフレータが必要です。
これどうやってするの ?
この外部アクティビティを使用できます-必要なのはContext
を提供することだけです:
LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
次に、さまざまなウィジェットを取得するには、レイアウトをインフレートします。
View view = inflater.inflate( R.layout.myNewInflatedLayout, null );
Button myButton = (Button) view.findViewById( R.id.myButton );
2014年7月現在の編集
Davideの answer のLayoutInflater
の取得方法は、実際には私のものよりも正確です(ただし、まだ有効です)。
または...
LayoutInflater inflater = LayoutInflater.from(context);
または
View.inflate(context, layout, parent)
コンテキストオブジェクトを使用すると、次のコードからLayoutInflaterを取得できます。
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);