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

Posted

技术标签:

【中文标题】如何在给定上下文的情况下获取布局充气器?【英文标题】:How to Get a Layout Inflater Given a Context? 【发布时间】:2011-01-13 19:23:33 【问题描述】:

我正在编写 ListAdapter 的自定义实现。

在它的构造函数中,我接受了一个上下文、一个资源 ID(即表示布局文件的 R.id.xxx)以及一个列表和一个地图(它们包含数据)。

现在,问题是我需要一个 LayoutInflater 来获取位于单独布局 XML 文件中的 View 对象。

我怎样才能在只给定上下文的情况下获得 LayoutInflater?

现在,为什么我认为这是可能的,因为这与传递给 ArrayAdapter 的构造函数(上下文、资源、textViewResourceId、数据数组)的内容非常相似,而且我认为 ArrayAdapter 也必须仅给定 Context 使用 LayoutInflater。

但是怎么做呢?

【问题讨论】:

【参考方案1】:

您可以使用staticfrom() method from the LayoutInflater class:

 LayoutInflater li = LayoutInflater.from(context);

【讨论】:

谢谢!我试图找到 Context.getSomething().getAnotherThing().getLayoutInflater() ! 每次需要的时候都得到充气机是不是很贵,意思是,你认为我们应该救一个充气机的成员吗? 顺便说一句,我认为我们应该使用 LayoutInflater li = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) 最终 LayoutInflater.from(context) 在里面做同样的事情。 哪个更好?有 270 票的还是 25+ 票的 最好的使用方法是这个 LayoutInflater.from(context)。它实际上与context.getSystemService下面的答案相同,但是由于android可以更改底层方法,因此我们应该改用父方法。【参考方案2】:

您也可以使用此代码获取 LayoutInflater:

LayoutInflater li = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)

【讨论】:

LayoutInflater.from(Context ctx) 和这个 getSustemService(...) 有什么区别? +1,对于好问题,在实现方法 LayoutInflater.from(context) 时还调用 context.getSystemService() 从系统管理器获取 LayoutInflater 服务提供程序。所以调用堆栈可能会有一些差异。 LayoutInflater.from(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."); 返回 LayoutInflater;

以上是关于如何在给定上下文的情况下获取布局充气器?的主要内容,如果未能解决你的问题,请参考以下文章

java [Layout Inflater]获取布局充气器对象并使视图膨胀的方法。 #android_snippet #android

你如何获得更广泛的上下文 HTML,在 jQuery 或 Cheerio js 中包装给定的选择器代码?

布局充气器不充气视图

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

如何在没有上下文路径的情况下获取请求 URI?

如何解决'......是一个'类型',在给定的上下文中无效'? (C#)