直接调用LayoutInflater有什么区别?

时间:2012-05-27 19:35:53

标签: android layout-inflater

我浏览了一些教程,在Android Doc中,它说在实例化时不直接访问LayoutInflater。来自Google Doc的示例:

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

我经历的教程就是这个:

LayoutInflater inflater = LayoutInflater.from(parent.getContext());

所以除了显而易见的不同代码之外,我真正理解的不同之处在于。任何解释都非常感激。我假设Android Doc应该是我们遵循的那个,但我不确定它是否有所作为。

2 个答案:

答案 0 :(得分:17)

如果您打开Android源代码,您会看到LayoutInflator.from方法如下所示:

/**
 * Obtains the LayoutInflater from the given context.
 */
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;
}

这意味着你问题中的两行代码做同样的事情。不确定你读到的教程是什么,但我没有看到任何功能上的差异。使用from方法很不错,因为它需要少一点打字,就是这样。

答案 1 :(得分:2)

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

您从LayoutInflater Service Provider

获得System Manager
LayoutInflater inflater = LayoutInflater.from(parent.getContext());

您正在使用static

中的LayoutInflater Class方法

我会说差异仅在于代码以及你如何写这个也调用堆栈但结果是相同的 - 你会得到LayoutInflater

有关this

的更多信息

此致