三、ListView数据分类显示

思想:将承载数据的集合进行转换,然后拼接。

不复用布局的思想: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;
}

}


控件继承图:


效果图:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值