Android 之如何优化ListView
2014-12-09 18:13
417 查看
一:概要
众所周知,在开发过程中,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只要找一次控件就好了,不用每次都去寻找。代码表示如下:<span style="font-family:Microsoft YaHei;font-size:14px;">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<Coupon> list = new ArrayList<Coupon>(); 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; } @Override public int getCount() { return list.size(); } @Override public Coupon getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } @Override public 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<Coupon> list) { this.list.addAll(list); notifyDataSetChanged(); } // 清空 public void clear() { list.clear(); notifyDataSetChanged(); } } </span>
第四点:
分页加载数据,这样获取的数据会比较少,对网络依赖较少,可以很快完成,加载速度很快第五点:
对ListView做滚动事件处理,当ListView在滚动的过程中,不去加载网络图片,等滚动结束,在加载图片相关文章推荐
- android 之如何优化 ListView 简单解释
- Android面试(二)ListView优化,ListView和Scrollview冲突问题,mvc模式,什么是ANR 如何避免它?
- Android ListView优化 如何省略ViewHolder方法
- android问题及其解决-优化listView卡顿和如何禁用ListView的fling
- Android开发之ListView 适配器(Adapter)优化
- android如何实现ListView中的CheckBox的全选、反选、全不选
- [Android]ListView性能优化之视图缓存(续) 推荐
- [Android 界面]ListView性能优化之视图缓存
- [Android]ListView性能优化之视图缓存
- 提高android应用的效率--主要讲解listview的优化
- [Android]ListView性能优化之视图缓存
- [Android] ListView中getView的原理+如何在ListView中放置多个item
- 如何美化android程序:自定义ListView背景
- Android开发之ListView适配器优化
- Android ListView 性能优化-----(异步加载图片资源)
- Android开发之ListView 适配器(Adapter)优化
- [Android]ListView性能优化之视图缓存(续)
- [Android] ListView中getView的原理+如何在ListView中放置多个item
- Android开发之ListView 适配器(Adapter)优化
- Android ListView优化