优化前
public class FruitAdapter extends ArrayAdapter<Fruit> {
private final int resourceId;
@NonNull
@Override
@SuppressLint("ViewHolder")
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
Fruit fruit = getItem(position); //获取当前项的Fruit实例
View view = LayoutInflater.from(getContext()).inflate(resourceId, parent, false); //动态加载资源
ImageView fruitImage = view.findViewById(R.id.fruit_image);
TextView fruitName = view.findViewById(R.id.fruit_name);
fruitImage.setImageResource(fruit.getImageId());
fruitName.setText(fruit.getName());
return view;
}
public FruitAdapter(@NonNull MainActivity context, @NonNull List<Fruit> objects, int resourceId) {
super(context, resourceId, objects);
this.resourceId = resourceId;
}
}
优化后
public class FruitAdapter extends ArrayAdapter<Fruit> {
private final int resourceId;
@NonNull
@Override
@SuppressLint("ViewHolder")
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
Fruit fruit = getItem(position); //获取当前项的Fruit实例
View view;
ViewHolder viewHolder;
if (convertView == null) { //优化一下可以避免重复加载动态布局
view = LayoutInflater.from(getContext()).inflate(resourceId, parent, false);
viewHolder = new ViewHolder();
viewHolder.fruitImage = view.findViewById(R.id.fruit_image);
viewHolder.fruitName = view.findViewById(R.id.fruit_name);
} else {
view = convertView;
viewHolder = (ViewHolder) view.getTag();
}
viewHolder.fruitImage.setImageResource(fruit.getImageId());
viewHolder.fruitName.setText(fruit.getName());
return view;
}
public FruitAdapter(@NonNull MainActivity context, @NonNull List<Fruit> objects, int resourceId) {
super(context, resourceId, objects);
this.resourceId = resourceId;
}
static class ViewHolder { //暂存ListView子项中的图片和名称,避免重复调用findViewById
ImageView fruitImage;
TextView fruitName;
}
}