ListView、GridView、RecyclerView分析
ListView
列表数据显示需要4个元素,分别是:
- [1] 用来展示列表的控件ListView
- [2] 给列表装配数据的适配器adapter
- [3] 需要展示的数据集
- [4] 数据集展示需要的item布局View
ListView 复用模板
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//有视图缓存,复用视图
if (convertView == null) {
convertView = View.inflate(context, R.layout.item, null);//视图获取方法,可以用别的方法
} else {
//复用convertView
}
//进行数据绑定,返回item的View
return convertView;
}
ListView的优化模式
ListView通过Adapter模式、观察者模式、Item View复用机制实现了高效的列表显示。
观察者模式源码分析:
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