您的位置首页百科知识

如何优化listview

如何优化listview

的有关信息介绍如下:

如何优化listview

一:概要众所周知,在开发过程中,ListView的优化是比较重要的那么,如何去优化呢?如何ListView的提升效率,好像有很多,其实最主要的就是在于adapter中getView方法的优化,那么如何使的getView优化呢?第一点: 在getView() 中重用了convertView,很大程度上的减少了内存的消耗。通过判断convertView是否为null,是的话就需要产生一个视图出来,然后给这个视图数据,最后将这个视图返回给底层,呈献给用户。 第二点:比如:listview 屏幕显示10条数据,当用户滑动listview的时候,第11条数据出现的时候,第一条数据就会被android本身提供的 Recycler,将这条item(View)放进RecycleBin(回收站)中,然后显示新视图的时候,从RecycleBin中重复用这个View。就不会造成每次都要去创建新的View,而节约了大量的资源。第三点:自身写一个ViewHolder 类,这个ViewHolder,用来标识view中一些控件,方便进行一些事件相应操作的设置,这样就 不用每次 getView() 的View只要找一次控件就好了,不用每次都去寻找。 代码表示如下:package com.x1.tools.adapter;import java.util.ArrayList;import java.util.List;import android.annotation.SuppressLint;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;import com.x1.tools.Config;import com.x1.tools.vo.Coupon;import com.x1.ui.R;/**** 优惠卷的适配器** @author zengtao 2015年3月31日 上午9:46:08*/@SuppressLint({ "InflateParams", "SimpleDateFormat" })public class CouponAdapter extends BaseAdapter {private List list = new ArrayList();private Context context;private int[] couponImage = { R.drawable.coupon_image_1,R.drawable.coupon_image_2 };private int[] couponRight = { R.drawable.coupon_rightimage };public CouponAdapter(Context context) {this.context = context;}@Overridepublic int getCount() {return list.size();}@Overridepublic Coupon getItem(int position) {return list.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {if (convertView == null) {convertView = LayoutInflater.from(context).inflate(R.layout.coupon_item_list, null);ViewHolder vh = new ViewHolder(convertView);convertView.setTag(vh);}ViewHolder viewHolder = (ViewHolder) convertView.getTag();viewHolder.fillView(getItem(position));return convertView;}/*** 内部类实现查找控件和数据的显示,这样可以实现布局和控件只加载一次** @author zengtao 2015年3月31日 下午1:34:00*/class ViewHolder {public ImageView mCouponImage, mCouponRight;public TextView mCouponMoney, mCouponDisplayMessage, mCouponTime;public ViewHolder(View view) {mCouponImage = (ImageView) view.findViewById(R.id.coupon_icon);mCouponRight = (ImageView) view.findViewById(R.id.coupon_righticon);mCouponMoney = (TextView) view.findViewById(R.id.coupon_money);mCouponDisplayMessage = (TextView) view.findViewById(R.id.coupon_message);mCouponTime = (TextView) view.findViewById(R.id.coupon_stime_endtime);}public void fillView(Coupon coupon) {Coupon cou = coupon;if (cou.getCoupon_bgimage() == 1) {mCouponImage.setImageResource(couponImage[0]);} else if (cou.getCoupon_bgimage() == 0) {mCouponImage.setImageResource(couponImage[1]);}if (cou.getCoupon_iconimage() == 0) {mCouponRight.setImageResource(couponRight[0]);}mCouponMoney.setText(cou.getCoupon_money() + "元");mCouponDisplayMessage.setText(cou.getCoupon_access());mCouponTime.setText(Config.formatDate(cou.getCoupon_begintime())+ "至" + Config.formatDate(cou.getCoupon_endtime()));}}// 添加数据public void addAll(List list) {this.list.addAll(list);notifyDataSetChanged();}// 清空public void clear() {list.clear(  https://tijian.scykxy.cn#);notifyDataSetChanged();}}第四点:分页加载数据,这样获取的数据会比较少,对网络依赖较少,可以很快完成,加载速度很快第五点:对ListView做滚动事件处理,当ListView在滚动的过程中,不去加载网络图片,等滚动结束,在加载图片