有一种方法可以获得layoutInflater:
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
另一种方式是:
LayoutInflater inflater = LayoutInflater.from(context);
第三个(当我在一个活动中时)是:
LayoutInflater inflater = getLayoutInflater();
那么它们之间有什么区别?
请注意,当我将第三个inflater发送到我的适配器时,我的应用程序工作正常。但是当我发送上下文并通过第二种方式创建了inflater时,它并没有!
答案 0 :(得分:17)
在活动之外使用
LayoutInflater inflater = (LayoutInflater) context.getSystemService(
Context.LAYOUT_INFLATER_SERVICE );
在您的活动中
LayoutInflater inflater = getLayoutInflater();
如果您打开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。
答案 2 :(得分:4)
唯一的区别是您使用的上下文。如果您与LayoutInflater.fromContext()
或context.getSystemService(...)
一起使用的上下文实际上是一个活动,则它应该等同于Activity.getLayoutInflater()
。如果它是应用程序对象,则可能会出现包含片段IIRC的视图的问题。
答案 3 :(得分:2)
实际上我认为getLayoutInflater()
- 活动方法是一种方便的方法。
请记住Activity
子类Context
,因此Context
中的所有方法也可在Activity
类中使用。
在内部会有LayoutInflater.fromContext()
或context.getSystemService()
的来电,所以我会坚持context.getSystemService
两者以避免不必要的方法调用以澄清我正在拨打电话系统服务。