在不在活动中的地方调用getLayoutInflater()

时间:2011-10-18 07:23:52

标签: android service android-context toast layout-inflater

需要导入什么或如何在活动以外的地方调用布局发生器?

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,这是限制吗?如果我想创建自定义对话框并且我想为它充气视图,或者如果我想要从服务中显示自定义视图的Toast消息,我只有来自服务的上下文我没有任何活动该怎么办?但我想展示自定义信息。

我需要在代码中不在活动类中的地方使用inflater。

我该怎么做?

6 个答案:

答案 0 :(得分:367)

您可以使用此外部活动 - 您只需提供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的{​​{3}}实际上比我的更正确(尽管仍然有效)。

答案 1 :(得分:238)

或......

LayoutInflater inflater = LayoutInflater.from(context);

答案 2 :(得分:10)

View.inflate(context, layout, parent)

答案 3 :(得分:9)

使用上下文对象,您可以从以下代码

获取LayoutInflater
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

答案 4 :(得分:0)

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

改为使用它!

答案 5 :(得分:-1)

LayoutInflater.from(context).inflate(R.layout.row_payment_gateway_item, null);