列表组件之ListView
Posted CSU迦叶
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了列表组件之ListView相关的知识,希望对你有一定的参考价值。
1.ListView是什么
- 一个显示可滚动项目的视图组件
- 系统使用Adapter(适配器)将列表项目插入列表
- 适配器从来源提取内容
下图从MVC分析的话,ListView相当于View,Adapter相当于Controller,data相当于Model
缺点:屏幕里面只能展示有限个ItemView,却将全部的都加载出来了,十分占用内存
2.Adapter
系统有封装了一些,但是企业中并不常用
一般自定义Adapet,需要继承BaseAdapter,重写以下四个方法
getCount:要展示多少个view
getItem:处于某个位置,得到的数据是什么
getItemId:处于某个位置,数据对应的id是什么
getView:滑到某个位置,view长什么样子
重点是getView方法,position当前view的位置,convertView要被转换出来的view,判断缓存池里面是否为空,如果为空,创建一个ViewHolder,将convertView渲染出来(inflate相当于new出来),再对viewHolder的子控件进行赋值,最后通过setTag将viewHolder和convertView关联。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
holder = new ViewHolder();
convertView = View.inflate(parent.getContext(), R.layout.number_list_item, null);
holder.listItemNumberView = (TextView) convertView.findViewById(R.id.tv_item_number);
holder.viewHolderIndex = (TextView) convertView.findViewById(R.id.tv_view_holder_instance);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.listItemNumberView.setText(String.valueOf(position));
holder.viewHolderIndex.setText(String.format("ViewHolder index: %s", position));
int backgroundColorForViewHolder = ColorUtils.
getViewHolderBackgroundColorFromInstance(convertView.getContext(), position % 10);
convertView.setBackgroundColor(backgroundColorForViewHolder);
return convertView;
}
如果没有viewHolder,以下代码每次都要再写一遍
(TextView) convertView.findViewById(R.id.tv_item_number);
(TextView) convertView.findViewById(R.id.tv_view_holder_instance);
而findViewById是一个耗时的工作
以上是关于列表组件之ListView的主要内容,如果未能解决你的问题,请参考以下文章