想要獲得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();
}
});