是什麼?
直接翻譯“無法在列表中添加 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。