How many LayoutInflater are instantiated in an application?
我在 LayoutInflater 上使用 Factory 界面,以便能够在我的应用程序中的所有 TextView 上设置自定义字体。不幸的是,我的应用程序中有一些地方不起作用。经过调查,例如,在我的 ListView 的适配器中,用于填充单元格的 LayoutInflater 似乎与应用程序其余部分使用的不同(我的活动具有复杂的片段结构)。
这种行为正常吗?如何确保始终使用相同的 LayoutInflater,无论我以何种方式检索它?
谢谢
当您从
编辑:
上面说我错了;)
我查看了源代码并在 android.view.ContextThemeWrapper(这是 activiti 的超类)中:
1 2 3 4 5 6 7 8 9 | @Override public Object getSystemService(String name) { if (LAYOUT_INFLATER_SERVICE.equals(name)) { if (mInflater == null) { mInflater = LayoutInflater.from(mBase).cloneInContext(this); } return mInflater; } return mBase.getSystemService(name); } |
在 android.app.ContextImpl 中可能是 mBase 上下文实现:
1 2 3 4 | public Object getSystemService(String name) { ServiceFetcher fetcher = SYSTEM_SERVICE_MAP.get(name); return fetcher == null ? null : fetcher.getService(this); } |
在哪里:
私有静态最终HashMap SYSTEM_SERVICE_MAP =
新的 HashMap();
ServiceFetcher 是一个用于缓存和检索"系统服务实例"的内部类。
确定每个活动/ContextWrapper 都有一个 LayoutInflater。如需更多观察研究来源,请;)
我不认为 LayoutInflaters 的数量真的很重要(除非你真的有数千个)。但是,是的,使用多个 Inflaters 确实是正常的。我在处理适配器视图时使用了很多(因为我不使用一个静态视图。每个适配器仍然只使用一个)。
如果您的代码中有适配器无法工作的地方,您可能会遗漏一些东西。我会在 Inflater 不起作用的地方发布代码。