getLayoutInflater()和.getSystemService(Context.LAYOUT_INFLATER_SERVICE)之间有什么区别吗

时间:2012-08-26 17:35:42

标签: android android-layout android-widget

简单的“不”回答会使我平静下来。 如果有什么不同那么它是什么?

4 个答案:

答案 0 :(得分:40)

只要调用getLayoutInflater()的活动或窗口具有调用getSystemService()的相同上下文,就没有区别。


证明您可以将getLayoutInflater()返回的LayoutInflater跟踪到LayoutInflater.from(),您可以从源代码中看到这只是getSystemService()的快捷方式:< / p>

public static LayoutInflater from(Context context) {
    LayoutInflater LayoutInflater =
            (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    if (LayoutInflater == null) {
        throw new AssertionError("LayoutInflater not found.");
    }
    return LayoutInflater;
}

答案 1 :(得分:4)

至少有一种情况只有

  

getSystemService(Context.LAYOUT_INFLATER_SERVICE);

必须使用

代替对方

  

getLayoutInflater

这种情况属于任意对象类。例如,我有一个类调用objectA的实例。在objectA中,我想将视图扩展到父视图(在ArrayAdapter中发生,它在列表视图上膨胀自定义行。)在这种情况下, context.getLayoutInflater 不会因为没有与上下文关联的活动或窗口而工作。只有 getSystemService(Context.LAYOUT_INFLATER_SERVICE) 才适合。

答案 2 :(得分:3)

这是你定义LayoutInflater的方法。

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

并且getLayoutInflater()只是通过返回LayoutInflater来“快速访问窗口从其上下文中检索的LayoutInflater实例”(来自documentation)。

类似地,getSystemService(Context.LAYOUT_INFLATER_SERVICE)用于检索LayoutInflater以在此上下文中展开布局资源。

所以,实际上两者之间存在 NO 差异。

来源:Documentation

答案 3 :(得分:2)

NO。

完全没有区别。