如何在给定上下文的情况下获取布局充气器?
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】:您可以使用static
from()
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