日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

addHeaderView()异常 —— setAdapter has already been called

發布時間:2025/4/14 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 addHeaderView()异常 —— setAdapter has already been called 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本博文為轉載,由于找不到第一作者所以只能留下我轉自的地址:
http://blog.csdn.net/shaoyezhangliwei/article/details/50385912

異常提示:java.lang.IllegalStateException: Cannot add header view to list – setAdapter has already been called.
產生原因:addHeaderView()調用在setAdapter()之后,并且該代碼運行在Android4.3之前的系統版本。Android SDK與API Level對應表

我們來看看(Android4.3)API-18 和 (Android4.2)API-17的Listview代碼片段:

API-18

public void addHeaderView(View v, Object data, boolean isSelectable) { final FixedViewInfo info = new FixedViewInfo(); info.view = v; info.data = data; info.isSelectable = isSelectable; mHeaderViewInfos.add(info); // Wrap the adapter if it wasn't already wrapped. if (mAdapter != null) { if (!(mAdapter instanceof HeaderViewListAdapter)) { mAdapter = new HeaderViewListAdapter(mHeaderViewInfos, mFooterViewInfos, mAdapter); } // In the case of re-adding a header view, or adding one later on, // we need to notify the observer. if (mDataSetObserver != null) { mDataSetObserver.onChanged(); } } }

API-17

public void addHeaderView(View v, Object data, boolean isSelectable) { if (mAdapter != null && ! (mAdapter instanceof HeaderViewListAdapter)) { throw new IllegalStateException( "Cannot add header view to list -- setAdapter has already been called."); } FixedViewInfo info = new FixedViewInfo(); info.view = v; info.data = data; info.isSelectable = isSelectable; mHeaderViewInfos.add(info); // in the case of re-adding a header view, or adding one later on, // we need to notify the observer if (mAdapter != null && mDataSetObserver != null) { mDataSetObserver.onChanged(); } }

在API-17中,假如adapter不為空,則會直接拋出異常,而在API-18中則做了相關的優化。

建議

木有建設性的提議,只能提醒大家,目前市面上主流的Android系統還是Android4.3以下版本,所以在使用addHeaderView()要注意這一點。

轉載于:https://www.cnblogs.com/codenoodles/p/6421165.html

總結

以上是生活随笔為你收集整理的addHeaderView()异常 —— setAdapter has already been called的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。