【问题标题】:Android: Disabling checkbox after clicked with cb for my custom adapterAndroid:为我的自定义适配器单击 cb 后禁用复选框
【发布时间】:2013-09-02 21:16:51
【问题描述】:

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

选择3张图片后,必须禁用所有CB,以免添加更多图片。

这是我的代码:

MainActivity:实现 OnCheckedChangedListener

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

MyAdapter:扩展 ArrayAdapter(Model)

@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】:

    在您的 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);   
                          }
                    }
                });
    

    【讨论】:

    • 只是一个后续问题先生,在我得到 list.size 后,我怎样才能以下列方式禁用我的 CB:for(int a = 0; a
    • 对不起我的错误。我更新了我的答案。如果列表大小 > 3,那么它将取消选中任何进一步的复选框检查。我希望这能解决你的目的。
    猜你喜欢
    • 2016-01-12
    • 2014-03-20
    • 2014-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多