想要获得item的position,其实可以直接settag(position)
全选,反选的话,用一个map集合来存储Checkbox的状态即可
首先要自定义好BaseAdapter
如下:
class myBaseAdapter extends BaseAdapter {
class ViewHolder {
private ImageView icon;
private TextView name_Tv, desc_Tv;
private CheckBox checkBox;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder viewHolder;
TaskInfo taskInfo;
if (position == 0) {
TextView view = new TextView(JinChengGuanLiActivity.this);
view.setText("用户进程(" + userTaskInfos.size() + ")");
view.setTextColor(Color.WHITE);
view.setBackgroundColor(Color.GRAY);
return view;
} else if (position == userTaskInfos.size() + 1) {
TextView view = new TextView(JinChengGuanLiActivity.this);
view.setText("系统进程(" + systemTaskInfos.size() + ")");
view.setTextColor(Color.WHITE);
view.setBackgroundColor(Color.GRAY);
return view;
}
if (convertView != null && convertView instanceof ViewGroup) {
viewHolder = (ViewHolder) convertView.getTag();
} else {
convertView = View.inflate(JinChengGuanLiActivity.this,
R.layout.jinchengguanli_listview, null);
viewHolder = new ViewHolder();
viewHolder.icon = (ImageView) convertView
.findViewById(R.id.jinchengguanli_icon);
viewHolder.name_Tv = (TextView) convertView
.findViewById(R.id.jinchengguanli_name);
viewHolder.desc_Tv = (TextView) convertView
.findViewById(R.id.jinchengguanli_inrom);
viewHolder.checkBox = (CheckBox) convertView
.findViewById(R.id.jinchengguanli_checkbox);
convertView.setTag(viewHolder);
}
if (position <= userTaskInfos.size()) {
taskInfo = userTaskInfos.get(position - 1);
} else {
taskInfo = systemTaskInfos.get(position - userTaskInfos.size()
- 2);
}
viewHolder.icon.setImageDrawable(taskInfo.getIcon());
viewHolder.name_Tv.setText(taskInfo.getName());
viewHolder.desc_Tv.setText("占用内存" + taskInfo.getMemory());
viewHolder.checkBox.setTag(position);
viewHolder.checkBox.setChecked(isCheckMap.get(position));
viewHolder.checkBox
.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
// TODO Auto-generated method stub
int id = (Integer) buttonView.getTag();
isCheckMap.put(id, isChecked);
}
});
return convertView;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return userTaskInfos.size() + systemTaskInfos.size() + 2;
}
}
主要看checkbox的监听那部分
并且在之前通过settag()方法把position存入checkbox中
isCheckBox是一个map集合,HashMap<Integer,Boolean>,存放position,isChecked
所以在getView方法中,我直接设置 checkBox.setChecked(isCheckMap.get(position));
viewHolder.checkBox.setChecked(isCheckMap.get(position));
viewHolder.checkBox
.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
// TODO Auto-generated method stub
int id = (Integer) buttonView.getTag();
isCheckMap.put(id, isChecked);
}
});
什么时候初始化的isCheckBox?
在刚开始的时候,我写了个方法:
private void setCheckBox(boolean isChecked) {
for (int i = 1; i <= userTaskInfos.size(); i++) {
isCheckMap.put(i, isChecked);
}
for (int j = userTaskInfos.size() + 1; j < userTaskInfos.size()
+ systemTaskInfos.size() + 2; j++) {
isCheckMap.put(j, isChecked);
}
}
我用的是setCheckBox(false),设置初始值都为false
这样设置后,再滚动ListView时就不会消失了
如果还要做全选,反选的话
可以根据isCheckBox集合中储存的key-vale来做对应的操作
全选:就直接
setCheckBox(true);
adapter.notifyDataSetChanged();
反选:
inverse_btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
for (int i = 1; i <= userTaskInfos.size(); i++) {
isCheckMap.put(i, !isCheckMap.get(i));
}
for (int j = userTaskInfos.size() + 1; j < userTaskInfos.size()
+ systemTaskInfos.size() + 2; j++) {
isCheckMap.put(j, !isCheckMap.get(j));
}
adapter.notifyDataSetChanged();
}
});