//设置默认的显示
isCheck.put(i,flag);
}
}
//设置数据
publicvoidsetData(Listdata){
this.list=data;
}
//添加数据
publicvoidaddData(Beanbean){
//下标数据
list.add(0,bean);
}
@Override
publicintgetCount(){
//TODOAuto-generatedmethodstub
//如果为null就返回一个0
returnlist!
=null?
list.size():
0;
}
@Override
publicObjectgetItem(intposition){
//TODOAuto-generatedmethodstub
returnlist.get(position);
}
@Override
publiclonggetItemId(intposition){
//TODOAuto-generatedmethodstub
returnposition;
}
@Override
publicViewgetView(finalintposition,ViewconvertView,ViewGroupparent){
ViewHolderviewHolder=null;
Viewview=null;
//判断是不是第一次进来
if(convertView==null){
view=LayoutInflater.from(mContext).inflate(R.layout.item,null);
viewHolder=newViewHolder();
viewHolder.title=(TextView)view.findViewById(R.id.tvTitle);
viewHolder.cbCheckBox=(CheckBox)view
.findViewById(R.id.cbCheckBox);
//标记,可以复用
view.setTag(viewHolder);
}else{
view=convertView;
//直接拿过来用
viewHolder=(ViewHolder)view.getTag();
}
//拿到对象
Beanbean=list.get(position);
//填充数据
viewHolder.title.setText(bean.getTitle().toString());
//勾选框的点击事件
viewHolder.cbCheckBox
.setOnCheckedChangeListener(newOnCheckedChangeListener(){
@Override
publicvoidonCheckedChanged(CompoundButtonbuttonView,
booleanisChecked){
//用map集合保存
isCheck.put(position,isChecked);
}
});
//设置状态
if(isCheck.get(position)==null){
isCheck.put(position,false);
}
viewHolder.cbCheckBox.setChecked(isCheck.get(position));
returnview;
}
//优化
publicstaticclassViewHolder{
publicTextViewtitle;
publicCheckBoxcbCheckBox;
}
//全选按钮获取状态
publicMapgetMap(){
//返回状态
returnisCheck;
}
//删除一个数据
publicvoidremoveData(intposition){
list.remove(position);
}
}
当然,有些方法是后面写的,我们提前写好,比如删除和增加什么的
初始化数据
我们默认总是需要点数据的
privatevoidinitData(){
//默认显示的数据
Listlist=newArrayList();
list.add(newBean("张三"));
list.add(newBean("李四"));
list.add(newBean("王五"));
adapter=newListAdapter(this);
adapter.setData(list);
listview.setAdapter(adapter);
}
增加数据
//添加数据
caseR.id.tv_add:
adapter.addData(newBean("刘桂林"));
//通知刷新适配器
adapter.notifyDataSetChanged();
break;
全选数据
当我们全选的时候,按钮应该为全不选的,所以这里我们这里有状态的
caseR.id.btn_select_all:
//全选——全不选
MapisCheck=adapter.getMap();
if(btn_select_all.getText().equals("全选")){
adapter.initCheck(true);
//通知刷新适配器
adapter.notifyDataSetChanged();
btn_select_all.setText("全不选");
btn_select_all.setTextColor(Color.YELLOW);
}elseif(btn_select_all.getText().equals("全不选")){
adapter.initCheck(false);
//通知刷新适配器
adapter.notifyDataSetChanged();
btn_select_all.setText("全选");
btn_select_all.setTextColor(Color.YELLOW);
}
break;
删除数据
删除也是要考虑很多因素
//删除数据
caseR.id.btn_detele:
//拿到所有数据
MapisCheck_delete=adapter.getMap();
//获取到条目数量,map.size=list.size,所以
intcount=adapter.getCount();
//遍历
for(inti=0;i//删除有两个map和list都要删除,计算方式
intposition=i-(count-adapter.getCount());
//判断状态true为删除
if(isCheck_delete.get(i)!
=null&&isCheck_delete.get(i)){
//listview删除数据
isCheck_delete.remove(i);
adapter.removeData(position);
}
}
btn_select_all.setText("全选");
btn_select_all.setTextColor(Color.WHITE);
adapter.notifyDataSetChanged();
break;
这里的
intposition=i-(count-adapter.getCount());
是一个计算方式,当我们删除之后,实际上数组是需要重新排列的,同时按钮也要变回全选状态的
listview的点击
我们直接点击也是可以勾选cheakbox选中的
//listview的点击事件
@Override
publicvoidonItemClick(AdapterView
>parent,Viewview,intposition,
longid){
//判断view是否相同
if(view.getTag()instanceofViewHolder){
//如果是的话,重用
ViewHolderholder=(ViewHolder)view.getTag();
//自动触发
holder.cbCheckBox.toggle();
}
}
好的,这样的话就可以实现了。