主要解决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; } }