代码向上
private List<String> mList;
private SimpleAdapter mAdapter;
private ListView mLv;
public void onCreate(Bundle saveIn){
mLv = (ListView)findViewByID(R.id.lv);
mList = new ArrayList();
mList.add("123");
mLv.setAdapter(mAdapter);
mAdapter = new SimpleAdapter(this,mList,android.R.layout.item_1_simple);
}
看出问题了吗?
上面执行setAdapter的时候mAdapter其实还没初始化,但不会报错。不过数据不会显示出来。
setAdapter()方法源码:
@Override
public void setAdapter(ListAdapter adapter) {
if (mAdapter != null && mDataSetObserver != null) {
mAdapter.unregisterDataSetObserver(mDataSetObserver);
}
resetList();
mRecycler.clear();
if (mHeaderViewInfos.size() > 0|| mFooterViewInfos.size() > 0) {
mAdapter = new HeaderViewListAdapter(mHeaderViewInfos, mFooterViewInfos, adapter);
} else {
**mAdapter = adapter;**
}
mOldSelectedPosition = INVALID_POSITION;
mOldSelectedRowId = INVALID_ROW_ID;
// AbsListView#setAdapter will update choice mode states.
super.setAdapter(adapter);
if (mAdapter != null) {
mAreAllItemsSelectable = mAdapter.areAllItemsEnabled();
mOldItemCount = mItemCount;
mItemCount = mAdapter.getCount();
checkFocus();
mDataSetObserver = new AdapterDataSetObserver();
mAdapter.registerDataSetObserver(mDataSetObserver);
mRecycler.setViewTypeCount(mAdapter.getViewTypeCount());
int position;
if (mStackFromBottom) {
position = lookForSelectablePosition(mItemCount - 1, false);
} else {
position = lookForSelectablePosition(0, true);
}
setSelectedPositionInt(position);
setNextSelectedPositionInt(position);
if (mItemCount == 0) {
// Nothing selected
checkSelectionChanged();
}
} else {
mAreAllItemsSelectable = true;
checkFocus();
// Nothing selected
checkSelectionChanged();
}
requestLayout();
}
关键应该是加粗代码没执行,本人觉得问题就在这里了。
但是:
if (mHeaderViewInfos.size() > 0|| mFooterViewInfos.size() > 0) {
mAdapter = new HeaderViewListAdapter(mHeaderViewInfos, mFooterViewInfos, adapter);
} else {
**mAdapter = adapter;**
}
这个if里面判断的原理?实在不懂。求指教
http://www.360doc.com/content/12/0401/10/3700464_199872997.shtml
mLv.setAdapter(mAdapter);
mAdapter = new SimpleAdapter(this,mList,android.R.layout.item_1_simple);
这两句对调。