how to limit checkbox selection in listview?

前端 未结 5 1258
暖寄归人
暖寄归人 2020-12-30 17:35

friends,

i want to limit checkbox selection in android listivew to for example only 3 checkboxes should be selected otherwise it should give error message.

u

5条回答
  •  攒了一身酷
    2020-12-30 18:03

    int globalInc = 0;
    boolean isCheckGlobal = false;
    
    ArrayList checkings = new ArrayList();
    
    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
    
        ViewHolder viewHolder = null;
        if (convertView == null) {
            LayoutInflater inflator = context.getLayoutInflater();
            convertView = inflator.inflate(R.layout.list_inner, null);
            viewHolder = new ViewHolder();
            viewHolder.friendName = (TextView) convertView
                    .findViewById(R.id.friendName);
    
            viewHolder.checkbox = (CheckBox) convertView
                    .findViewById(R.id.checkbox);
    
            final MyAdapterSecond objectMyAdapter = new MyAdapterSecond();
    
            viewHolder.checkbox.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
    
                    int getPositionInClick = (Integer) v.getTag();
    
    
                    if (isCheckGlobal == false) {
                        if (checkings.contains(getPositionInClick)) {
                            globalInc--;
                            checkings.remove(checkings.indexOf(getPositionInClick));
                                                    } else {
                            objectMyAdapter.getCheck(false);
                        }
                    } else if (isCheckGlobal == true) {
                                                if (checkings.size() < 4) {
                            globalInc++;
                        }
    
                    }
                }
            });
    
            viewHolder.checkbox
                    .setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    
                        @Override
                        public void onCheckedChanged(CompoundButton buttonView,
                                boolean isChecked) {
                            int getPosition = (Integer) buttonView.getTag();
    
    
    
                            list.get(getPosition).setSelected(
                                    buttonView.isChecked());                            
    
                            callCheck(buttonView, "hi1");
                            if (checkings.size() > 4                            {
                                Toast.makeText(context, "Error = " + globalInc,
                                        Toast.LENGTH_LONG).show();
                                                                objectMyAdapter.setCheck(buttonView);
                                isCheckGlobal = false;
    
    
                            } else {
                                buttonView.setSelected(isChecked);
                                if (isChecked
                                        && (!checkings.contains(getPosition))) {
                                    checkings.add(getPosition);
                                                                    }
                                else if(!isChecked){
                                    if(checkings.contains(getPosition)){
                                        checkings.remove(checkings.indexOf(getPosition));
                                    }
                                }
                                isCheckGlobal = true;
                                                            }
    
                        }
                    });
            convertView.setTag(viewHolder);
            convertView.setTag(R.id.friendName, viewHolder.friendName);
    
            convertView.setTag(R.id.checkbox, viewHolder.checkbox);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }
        viewHolder.checkbox.setTag(position); // This line is important.
    
        viewHolder.friendName.setText(list.get(position).getname());
    
                viewHolder.checkbox.setChecked(list.get(position).isSelected());
    
        return convertView;
    
     }
    
    
     class MyAdapterSecond {
        CompoundButton buttonView;
    
        public void setCheck(CompoundButton buttonView) {
            this.buttonView = buttonView;
        }
    
        public void getCheck(boolean flag) {
            this.buttonView.setChecked(flag);
        }
    }
    

提交回复
热议问题