web-dev-qa-db-ja.com

アクティビティ中でない場所でのgetLayoutInflater()の呼び出し

インポートする必要があるもの、またはアクティビティ以外の場所でレイアウトインフレータを呼び出す方法

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を呼び出すことができますが、それは制限ですか?カスタムダイアログを作成し、そのビューを膨らませたい場合、またはサービスから表示されるカスタムビューでトーストメッセージを表示したい場合、アクティビティのないサービスのコンテキストのみが必要な場合しかし、私はカスタムメッセージを表示したい。

アクティビティクラスにないコード内の場所にインフレータが必要です。

これどうやってするの ?

167
Lukap

この外部アクティビティを使用できます-必要なのは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の answerLayoutInflaterの取得方法は、実際には私のものよりも正確です(ただし、まだ有効です)。

368
kaspermoerch

または...

LayoutInflater inflater = LayoutInflater.from(context);
238
Davide

または

View.inflate(context, layout, parent)

10
Prakash Nadar

コンテキストオブジェクトを使用すると、次のコードからLayoutInflaterを取得できます。

LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
9
anujprashar