Android:单击后禁用复选框(我在自定义适配器中使用cb。请帮助)

问题描述 投票:0回答:1

我的应用程序使用ListView(自定义适配器)来显示所有图像,我把checkbox(CB)标记为我选择的图像。

选择3张图像后,必须禁用所有CB以避免添加更多图像。请帮助我,我现在已经做了5天,仍然没有代码工作。

这是我的代码:

MainActivity:实现OnCheckedChangedListener

@Override
public void onCheckedChanged(CompoundButton arg0, boolean isChecked) {
     if (isChecked){
          checkbox = (CheckBox) arg0.getTag(R.id.check);
          checkbox.setEnabled(false);
      } 
}

MyAdapter:扩展ArrayAdapter(模型)

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder viewHolder = null;
    if (convertView == null) {
        LayoutInflater inflator = context.getLayoutInflater();
        convertView = inflator.inflate(R.layout.row, null);

        viewHolder = new ViewHolder();

        viewHolder.text = (TextView) convertView.findViewById(R.id.label);
        viewHolder.text2 = (TextView) convertView.findViewById(R.id.label2);
        viewHolder.img  = (ImageView)convertView.findViewById(R.id.img);
        viewHolder.checkbox = (CheckBox) convertView.findViewById(R.id.check);

        viewHolder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                int getPosition = (Integer) buttonView.getTag();  // Here we get the position that we have set for the checkbox using setTag.
                list.get(getPosition).setSelected(buttonView.isChecked()); // Set the value of checkbox to maintain its state.
                counter++;
                Log.d("mer", counter + " counter");

            }
        });

        convertView.setTag(viewHolder);

        convertView.setTag(R.id.label, viewHolder.text);
        convertView.setTag(R.id.label2, viewHolder.text2);
        convertView.setTag(R.id.img, viewHolder.img);
        convertView.setTag(R.id.check, viewHolder.checkbox);

        } else {

        viewHolder = (ViewHolder) convertView.getTag();
    }

    viewHolder.checkbox.setTag(position); // This line is important.

    viewHolder.text.setText(list.get(position).getName());
    viewHolder.text2.setText(list2.get(position).getName());
    Bitmap bmImg = BitmapFactory.decodeFile(list2.get(position).getName());
    Bitmap bmThumbnail = ThumbnailUtils.extractThumbnail(bmImg,75, 75);
    viewHolder.img.setImageBitmap(bmImg);
    viewHolder.checkbox.setChecked(list.get(position).isSelected());

    return convertView;
}

提前致谢。

android listview checkbox adapter
1个回答
0
投票

在你的array adapter添加条件,检查列表大小,如下所示:

        viewHolder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

                    @Override
                    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                   if(list.size() < 3)
                      {
                        int getPosition = (Integer) buttonView.getTag();  // Here we get the position that we have set for the checkbox using setTag.
                        list.get(getPosition).setSelected(buttonView.isChecked()); // Set the value of checkbox to maintain its state.
                        counter++;
                        Log.d("mer", counter + " counter");
                      }
                  else
                      {
                        buttonView.setChecked(false);   
                      }
                }
            });
© www.soinside.com 2019 - 2024. All rights reserved.