提升ListView的运行效率

来源:互联网 发布:淘宝页面装修尺寸 编辑:程序博客网 时间:2024/04/29 21:32

主要解决2方面问题

1.在getView()方法中,每次都将布局重新加载一遍

2.在getView()方法中,每次都会调用View的findViewById()方法来获取一次控件

解决方法

1.在getView方法中有一个convertView参数,这个参数会将之前加载好的布局进行缓存

2.借助一个ViewHolder来解决每次获取控件的问题

package com.example.listviewtest;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ArrayAdapter;import android.widget.ImageView;import android.widget.TextView;import java.util.List;/** * Created by Administrator on 17/07/29. */public class FruitAdapter extends ArrayAdapter<Fruit> {    private int resuorceID;    public FruitAdapter(Context context, int textViewResuorceID, List<Fruit> objects){        super(context, textViewResuorceID, objects);        resuorceID = textViewResuorceID;    }    @Override    public View getView(int position, View convertView, ViewGroup parent){        Fruit fruit = getItem(position);        /*  convertView参数用于将之前加载好的布局进行缓存,以便以后进行重用    */        View view;        ViewHolder viewHolder;        if (convertView == null){            view = LayoutInflater.from(getContext()).inflate(resuorceID, parent, false)viewHolder = new ViewHolder();            viewHolder.fruitImage = (ImageView) view.findViewById(R.id.fruit_image);            viewHolder.fruitName = (TextView) view.findViewById(R.id.fruit_name);            view.setTag(viewHolder);        }else{            view = convertView;           viewHolder = (ViewHolder)view.getTag();        }        viewHolder.fruitImage.setImageResource(fruit.getImageID());        viewHolder.fruitName.setText(fruit.getName());        return view;    }    class ViewHolder {        ImageView fruitImage;        TextView fruitName;    }}


原创粉丝点击