202

何をインポートする必要がありますか、またはアクティビティ以外の場所でレイアウトインフレータを呼び出すにはどうすればよいですか?

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活動中のみ電話をかけることができますが、それは制限ですか?カスタムダイアログを作成してそのビューを拡張したい場合、またはサービスから表示されるカスタムビューでトーストメッセージを表示したい場合はどうなりますか?サービスからのコンテキストのみがあり、アクティビティはありませんしかし、私はカスタムメッセージを表示したいと思います。

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

これどうやってするの ?

4

6 に答える 6

426

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

于 2011-10-18T07:31:07.263 に答える
286

または ...

LayoutInflater inflater = LayoutInflater.from(context);
于 2013-09-22T10:21:40.917 に答える
12

また

View.inflate(context, layout, parent)

于 2014-06-10T21:50:46.270 に答える
11

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

LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
于 2011-10-18T07:31:31.103 に答える
4
LayoutInflater.from(context).inflate(R.layout.row_payment_gateway_item, null);
于 2019-03-28T07:48:33.593 に答える
3
LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE );

代わりにこれを使用してください!

于 2019-09-07T10:48:34.620 に答える