如何记录ListView滚动后CheckBox保持选中状态以及当全选后让滚动出来的item也被选中

1. 定义成员变量用于记录ListView所有item的选中状态:

private Map<Integer, Boolean> checkStatusMap = new HashMap<Integer, Boolean>();
2. 在adapter初始化时候向checkStatusMap中put listView数据个数的false(false意味着一开始都是未选中):

private class CallLogListAdapter extends BaseAdapter {
        private Context context;
        private ViewItemHolder holder;
        private LayoutInflater inflater;
        
        public CallLogListAdapter(Context c) {
            this.context = c;
            this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            int position = 0;
            for(int i = 0; i < recordList.size(); i++){
                checkStatusMap.put(position++, false);
            }
        }

3. 在listView的onItemClick()方法或者checkbox的onClick()方法方法中记录checkbox选中状态:

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
	ViewItemHolder holder = (ViewItemHolder) view.getTag();
	holder.contactIsDelCheckBox.toggle();
	boolean isChecked = holder.contactIsDelCheckBox.isChecked();
	// save CheckBox status		
	checkStatusMap.put(position - 1, isChecked);
       
        //...
}

4. 在adapter的getView()方法中从checkStatusMap中获取选中

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
   if (convertView != null) {
	holder = (ViewItemHolder) convertView.getTag();
   } else {
	convertView = inflater.inflate(R.layout.call_log_delete_preview_item, null);
	holder = new ViewItemHolder();
	holder.contactTimeTextView= (TextView) convertView.findViewById(R.id.contact_time);
	holder.contactTypeImageView = (ImageView) convertView.findViewById(R.id.contact_type);
	holder.contactNumberTextView = (TextView) convertView.findViewById(R.id.contact_number);
	holder.contactByImageView = (ImageView) convertView.findViewById(R.id.contact_by);
	holder.contactDurationTextView = (TextView) convertView.findViewById(R.id.contact_duration);
	holder.contactIsDelCheckBox = (CheckBox) convertView.findViewById(R.id.contact_is_delete);
	convertView.setTag(holder);
   }		

   // init holder
   // ......

   // get checkbox check status
   holder.contactIsDelCheckBox.setChecked(checkStatusMap.get(position));
   return convertView;
}
5.  如果点击了全选CheckBox,则往checkStatusMap中遍历put进入全部true 否则put进入全部false:

private void checkAllRecord(boolean isChecked){
	int size = recordListView.getChildCount();
		
	if(isChecked){
		for(int i = 1; i < size; i++){
			RelativeLayout layout = (RelativeLayout) recordListView.getChildAt(i);
			CheckBox isDel = (CheckBox) layout.findViewById(R.id.contact_is_delete);
			isDel.setChecked(true);
		}
		mRecordDelButton.setEnabled(true);
			
		// set all checkbox check status to be checked
		for(int i = 0; i < checkStatusMap.size(); i++){
			checkStatusMap.put(i, true);
		}
	}else{
		for(int i = 1; i < size; i++){
			RelativeLayout layout = (RelativeLayout) recordListView.getChildAt(i);
			CheckBox isDel = (CheckBox) layout.findViewById(R.id.contact_is_delete);
			isDel.setChecked(false);
		}
		mRecordDelButton.setEnabled(false);
			
		// set all checkbox check status to be unchecked
		for(int i = 0; i < checkStatusMap.size(); i++){
			checkStatusMap.put(i, false);
		}
	}
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值