自定义Adapter新建一个类,继承BaseAdapter
最大程度的精准控制,最大程度的适配单一项目。
为了开发方便,如果自定义Adapter只用于单个的Activity,那么可以写成这个单个的Activity的内部类。(成员内部类和外部类参数共享)
如果多个Activity都用的到,建议单独写成一个类文件。
如果自定义Adapter只在一个项目中使用,可以不传递R文件下的常量。如果自定义Adapter在其他的项目下使用,需要传递单个item的布局文件。
优化的思想
第一层优化思想:
重用单个Item的布局对象,在本例中只需要用到四个。
第二层优化思想:
通过上一步的优化布局对象,来携带控件,起到减少find控件的代码。
自定义的Adapter中优化
//getView用于负责每个Item的数据设置
//position:当前绘制的Item的徐序号
//convertView:
//parent:Item所在的容器控件
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//position会自增
Log.d("parent", "parent" + parent);
Log.d("view", "view");
Log.d("position", "position" + position);
Log.d("id", "id");
ViewHolder viewHolder;
ImageView image;
TextView text;
View linearLayout = convertView;//重用,进行优化一
if (convertView == null) {
LayoutInflater inflater = LayoutInflater.from(mContext);
linearLayout = inflater.inflate(R.layout.item_layout, null);
//找出Item
image = (ImageView) linearLayout.findViewById(R.id.item_image);
text = (TextView) linearLayout.findViewById(R.id.item_text);
viewHolder = new ViewHolder(image, text);
linearLayout.setTag(viewHolder);
} else {
//布局重用时
//先从布局对象中取出viewHolder
viewHolder = (ViewHolder) linearLayout.getTag();
//取出之前存进去的对象
image = viewHolder.mImage;
text = viewHolder.mText;
}
//
image.setImageResource(mImageList.get(position));
text.setText(mTextList.get(position));
return linearLayout;
}
//内部类,多个控件封装
class ViewHolder {
public ImageView mImage;
public TextView mText;
public ViewHolder(ImageView img, TextView txt) {
mImage = img;
mText = txt;
}
}