在 Android 中获取布局充气器的正确方法是啥?

Posted

技术标签:

【中文标题】在 Android 中获取布局充气器的正确方法是啥?【英文标题】:What is the correct way to get layout inflater in Android?在 Android 中获取布局充气器的正确方法是什么? 【发布时间】:2014-01-26 11:58:41 【问题描述】:

有一种方法可以得到layoutInflater:

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

另一种方式是:

LayoutInflater inflater = LayoutInflater.from(context);

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

LayoutInflater inflater = getLayoutInflater();

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

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

【问题讨论】:

差别不大 在 grepcode 上查找这些方法,以便了解它们之间的区别 美学上,第一个 :) 否则,都一样。 看到这个developer.android.com/reference/android/view/… 可能重复:***.com/q/2212197/187543 【参考方案1】:

在您的活动之外使用

    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() 的 Activity 或 Window 与调用 getSystemService() 的 Context 相同,就没有区别。

【讨论】:

你成功了,我从过去五天开始搜索,但没有遇到这个错误,现在你的解决方案可以正常工作@Shyam Deore【参考方案2】:

它们之间没有太大区别。

正如医生所说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)

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

其实我认为getLayoutInflater()-Activity的方法是一种方便的-方法。

记住ActivityContext 的子类,所以Context 中可用的所有方法在Activity 类中也可用。

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

【讨论】:

以上是关于在 Android 中获取布局充气器的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何在给定上下文的情况下获取布局充气器?

Android Wear 圆形模拟器充气方形布局

在Android中获取FCM消息令牌的正确方法是啥?

加载应用程序时布局充气器错误

获取Android NDK版本的正确方法是啥

布局充气器不充气视图