编写自定义Adapter可以继承BaseAdapter类,如果是数据库使用可以继承CursorAdapter。在本例中继承了BaseAdapter类,BaseAdapter是一个抽象类,必须在它的子类中实现下面的方法:
• int getCount() 返回总数据源中总的记录数;
• Object getItem(int position) 根据选择的项目的位置,获得选择的数据源中某个项目的数据;
• long getItemId(int position) 根据选择的项目的位置;
• View getView(int position, View convertView, ViewGroup parent) 获得要展示的项目View对象。
这里最为麻烦的方法就是getView(),getView()方法是ListView的每个列表项目绘制在屏幕上时被调用。该方法其中的一个参数是convertView,在ListView第一次显示列表项目的时候,convertView是null值。当向上滑动屏幕时候,屏幕上面的列表项目退出屏幕,屏幕下面原来不可见的列表项目会进入屏幕,这个时候的convertView不是null值,下面代码的处理对于提供ListView控件提高性能是至关重要的。
if (convertView == null) {
convertView = mInflater.inflate(R.layout.main, null);
holder = new ViewHolder();
holder.text = (TextView) convertView
.findViewById(R.id.textview);
holder.icon = (ImageView) convertView.findViewById(R.id.icon);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
只有在convertView为null时才去实例化控件,创建convertView对象、holder对象,其中convertView对象是通过mInflater.inflate(R.layout.main, null)方法,从一个main.xml布局文件中加载并创建的。
而在convertView非null的时候不会实例化控件,否则每次都要实例化控件,当列表项目很多时,用户反复滑动屏幕会有“卡”的感觉,不再流畅了。
ViewHolder类是将每一个项目中的控件封装起来的类,可以在convertView 为null时候创建ViewHolder类的实例holder,然后通过convertView.setTag(holder);把它放到convertView中,而在convertView非null时候,再通过convertView.getTag()过的一个ViewHolder类的实例,这样在翻屏的时候就不会反复创建ViewHolder实例对象了,就本例而言只是创建了9个ViewHolder实例。
listvie 优化
只有第一屏(可视范围)调用getView所消耗的时间远远多于后面的,通过对
convertView == null内代码监控也是同样的结果。也就是说ListView仅仅缓存了可视范围内的View,随后的滚动都是对这些View进行数据更新。不管你有多少数据,他都只用ArrayList缓存可视范围内的View,
Android在UI优化方面可以从以下五个方面入手:
Adapter优化
背景和图片优化
绘图优化
视图和布局优化
内存分配优化
分享到:
相关推荐
Android ListView卡片效果,源码下载。
android listview 固定表头,固定前几列
Android listview viewpager 滑动 跳动 冲突解决 ListView中嵌套ViewPage有或者滑动手势冲突解决 blog 地址 : http://blog.csdn.net/aaawqqq/article/details/43824631
Android ListView边框圆角美化,可以用来仿iphone的个别界面。相当有用。美观。
android listView 改变选中行的 字体颜色和 图片
android listview带有editText的情况,解决editText的焦点问题,及数据错位问题。后2个包没用。
这是一个android listview分页查询显示的demo,使用sqlite数据库,然后每次显示10条,上拉加载更多数据,studio项目
Android ListView 实例源码
Android listview实现自动自动换行!
Android listview 下拉 刷新
android ListView简单用法
android listView复用导致item上面动画的错乱。网上大部分都是写的item上面显示静态图片的例子,我这个是解决显示动态图片时复用导致的动画显示错乱问题。问题描述:假如一屏可以显示10个item项,如果第一个正在播放...
android listView图片异步加载(拖动时不加载,双缓存)
android Listview下拉刷新 上拉(滑动分页)加载更多 高仿新浪微博下拉刷新,同时实现了滑动加载下一页
Android ListView分页功能源码
实现了 Android listView 分页功能,代码可以运行,功能完善。
android ListView简单示例
android listView 适配器demo
android listview嵌套listview实现折叠列表
android listView 分页加载