addHeaderView()异常 —— setAdapter has already been called
生活随笔
收集整理的這篇文章主要介紹了
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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习技法-随机森林(Random F
- 下一篇: 沼泽鳄鱼_SSL2511_矩阵乘法