Cannot add header view to list -- setAdapter has already been called.

是什么?

Cannot add header view to list -- setAdapter has already been called._第1张图片

直接翻译“无法在列表中添加 header view – setAdapter 已经被调用”,再换句话“不能在调用 setAdapter 之后,向 ListView 添加header view“。

这个问题是我在我调试下拉刷新ListView时遇到的(《 自定义控件:含下拉刷新和上拉加载的 ListView》),也算是涨了点姿势。

为什么?

点开 api17 的 ListView.addHeaderView(),发现有这么个 if 逻辑。注释中提示

Call this before calling setAdapter. 
This is so ListView can wrap the supplied cursor with one that will also account for header and footer views.

可见:setAdapter 会对 addHeaderView 造成影响。

再来看 api19

已经不再有抛异常的逻辑了,注释中提示:

When first introduced, this method could only be called before setting the adapter with 
Starting with {@link android.os.Build.VERSION_CODES#KITKAT} this method may be  called at any time

从 KITKAT(android 4.4, api19) 开始,可以在任何地方调用方法了。

怎么做?

总结:虽然在 api19 之后,不再受这个限制,但是为了兼容低版本,还是建议在 setAdapter 之前调用 addHeaderView。

你可能感兴趣的:(android,api,ListView,addheader)