思想:将承载数据的集合进行转换,然后拼接。
不复用布局的思想:item布局是ViewGroup的子类,则判断convertView是否是ViewGroup的子类,如果是就复用布局,负责就不复用布局。来确定优化,另外特殊位置时,直接跳出不设置数据。
具体实现:100个数,将奇数和偶数分离显示,代码如下
public class MyBaseAdapter extends BaseAdapter {
private Context context;private ArrayList<Integer> list,jiList,ouList;
public MyBaseAdapter(Context context, ArrayList<Integer> list) {
this.context = context;
this.list = list;
//拆分集合
jiList = new ArrayList<Integer>();
ouList = new ArrayList<Integer>();
for (Integer integer : list) {
if (integer%2==0) {
ouList.add(integer);//承载偶数
}else {
jiList.add(integer);//承载奇数
}
}
}
@Override
public int getCount() {
//改变长度,在ListView中显示分类标题。
return 1+jiList.size()+1+ouList.size();
}
@Override
public Object 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) {
// 显示几个调用几次
TextView tv = null;
ViewHolder holder;
int num;
if (position==0) {//第0个位置输出分类信息,所以布局需要重新定义
TextView textView = new TextView(context);
textView.setText("奇数有多少个:"+jiList.size());
return textView;
}else if (position<=jiList.size()) {
num = jiList.get(position-1);
}else if (position==jiList.size()+1) {
TextView textView = new TextView(context);
textView.setText("偶数有多少个:"+ouList.size());
return textView;
}else {
//将position转换为偶数集合下标
num = ouList.get(position-jiList.size()-2);
}
//布局是LinearLayout是viewGroup的子类
//而TextView和ViewGroup同级,继承自View
//只复用通用布局,不复用new出来的布局,细看控件继承关系图
if (convertView != null&&convertView instanceof ViewGroup) {
holder = (ViewHolder) convertView.getTag();
} else {
convertView = View.inflate(context, R.layout.list_item_base, null);
tv = (TextView)convertView.findViewById(R.id.tv);
holder = new ViewHolder();
holder.textView = tv;//用ViewHolder对象存储布局信息
convertView.setTag(holder);
}
holder.textView.setText(num + "");
return convertView;
}
// ListView的优化:存储item的布局。
//convertview中存放的是刚刚出去的的item的布局,
//刚刚开始的是null,当第一个item完全出去,新的item进来的时候才有值。
//②减少findViewById,用viewHolder(内部类)
//
class ViewHolder{
TextView textView;
}
}
控件继承图:
效果图: