編輯:關於Android編程
在Android 19之前,ListView的addHeader和addFooter必須在setAdapter之前調用,否則就會有異常,Android 19以及之後是沒有這個問題的。異常的具體表現為:
1.在setAdapter之後調用mListView.addHeaderView(mHeader);會拋出異常:
Cannot add header view to list -- setAdapter has already been called.
2.在setAdapter之後調用mListView.addFooterView(mFooter);雖然不會拋出異常,但是卻看不到添加的footer。
問題解決:
在Android 19之前,如果想在setAdapter之後添加header和footer,可以這樣做:
//設置adapter之後設置header和footer
ListAdapter originalAdapter; //得到之前給listview設置的adapter,如果已經知道,可以不用
if (mListView.getAdapter() instanceof HeaderViewListAdapter) {
HeaderViewListAdapter headerViewListAdapter = (HeaderViewListAdapter) mListView.getAdapter();
originalAdapter = headerViewListAdapter.getWrappedAdapter();
} else {
originalAdapter = mListView.getAdapter();
}
mListView.setAdapter(null);
mListView.addHeaderView(mHeader);
mListView.addFooterView(mFooter);
mListView.setAdapter(originalAdapter);
問題原因
我們可以對比Android 18和19的ListView的源碼,在addHeaderView的改變:
API 18
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 19
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();
}
}
}
可以看到,在Android 19之前,如果ListView設置過Adapter,會拋出異常,在Android 19中,google做了調整。
一,使用eclipse打包app內容新建keystore:1、先在eclipse中創建一個新的keystore看詳細圖2、接下來設置一些打包必要參數:3.設置好內容後點擊
從原理可以看出,STC在相機運動環境中,效果不會太好,尤其是在高速運動環境下。因為高速運動環境,背景幾乎與前景一起運動,這與其核心原理是違背的,其次,時間上下文關系,也是
ES文件浏覽器怎麼添加其他雲。ES文件浏覽器是一個能管理手機本地、局域網共享、FTP和藍牙文件的管理器。他有自己的個人雲,那我想添加其他的雲,怎麼辦呢?是不
最近項目迭代了幾個版本,目前比較輕松,雖然項目閒了,但是人不能太閒,否則就廢了。千裡之行始於足下、量變引起質變、學而不思則罔.......好了好了好了.....編不下去了