在Android中获取layoutinflater的正确方法是什么?

时间:2014-01-08 11:45:09

标签: java android layout-inflater

有一种方法可以获得layoutInflater:

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

另一种方式是:

LayoutInflater inflater = LayoutInflater.from(context);

第三个(当我在一个活动中时)是:

LayoutInflater inflater = getLayoutInflater();

那么它们之间有什么区别?

请注意,当我将第三个inflater发送到我的适配器时,我的应用程序工作正常。但是当我发送上下文并通过第二种方式创建了inflater时,它并没有!

4 个答案:

答案 0 :(得分:17)

在活动之外使用

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

在您的活动中

     LayoutInflater inflater = getLayoutInflater();

Check this

如果您打开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;
    }

并没有区别

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

答案 1 :(得分:5)

它们之间没有太大区别。

正如医生所说public abstract Object getSystemService (String name)

  

LayoutInflater,用于在此上下文中展开布局资源。

对于public static LayoutInflater from (Context context)

  

从给定的上下文中获取LayoutInflater。

您可以查看此帖子Is there any difference between getLayoutInflater() and .getSystemService(Context.LAYOUT_INFLATER_SERVICE)

答案 2 :(得分:4)

唯一的区别是您使用的上下文。如果您与LayoutInflater.fromContext()context.getSystemService(...)一起使用的上下文实际上是一个活动,则它应该等同于Activity.getLayoutInflater()。如果它是应用程序对象,则可能会出现包含片段IIRC的视图的问题。

答案 3 :(得分:2)

实际上我认为getLayoutInflater() - 活动方法是一种方便的方法。

请记住Activity子类Context,因此Context中的所有方法也可在Activity类中使用。

在内部会有LayoutInflater.fromContext()context.getSystemService()的来电,所以我会坚持context.getSystemService两者以避免不必要的方法调用以澄清我正在拨打电话系统服务。