选中一个复选框时,会选中多个复选框?

时间:2014-02-05 07:09:14

标签: android checkbox

我有一个自定义适配器类,如下所示。当我选中一个复选框时,其他复选框也会在7-8行后被选中。即使setonclicklisterner未实现,复选框的行为也相同。我需要一个合适的解决方案我搜索了很多但没有得到解决方案。 如何停止避免多选复选框?

public class CustomAdapter extends ArrayAdapter<Custom>{
    private ArrayList<Custom> entries;
    private Activity activity;
    private Context context;
    private qrusers qrusers;

    private String[] udis;
    ArrayList<String> userid= new ArrayList<String>();
    boolean[] checkBoxState;
    LayoutInflater vi;
    public CustomAdapter(Context context, ArrayList<Custom> entries,String []udis) {
        super(context,0,entries);
        this.entries = entries;
        this.context= context;
        this.udis=udis;
        checkBoxState=new boolean[entries.size()];
        this.qrusers =(qrusers) context;
        vi = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    public static class ViewHolder{
        public TextView item1;
        public TextView item2;
        public CheckBox chek;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        View v = convertView;
        ViewHolder holder;
        if (v == null) {

            v = vi.inflate(R.layout.checkboxlist, null);
            holder = new ViewHolder();
            holder.item1 = (TextView) v.findViewById(R.id.contactname);
            holder.item2 = (TextView) v.findViewById(R.id.companyname);
            holder.chek=(CheckBox)v.findViewById(R.id.checboxlist);

           holder.chek.setTag(udis[position]);


            v.setTag(holder);
           /* holder.chek.setOnCheckedChangeListener(new OnCheckedChangeListener() {

                private String s;

                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    // TODO Auto-generated method stub
                    if(isChecked){
                        checkBoxState[position]=true;
                        //  isChecked=true;
                        s=(String)buttonView.getTag();
                        Log.e("IDDDDDDDD", s);

                        userid.add(s);
                Log.e("ADDED ID", userid.toString());
                }
                    else{
                        checkBoxState[position]=false;
                        s=(String)buttonView.getTag();
                        userid.remove(s);
                        Log.e("Removed ID", userid.toString());
                    }
                    }
            });*/
            holder.chek.setOnClickListener(new OnClickListener() {
                private String s;
                @Override
                public void onClick(View v) {
                    if (((CheckBox) v).isChecked()){
                        checkBoxState[position]=true;
                        //  isChecked=true;
                        s=(String)v.getTag();
                        Log.e("IDDDDDDDD", s);

                        userid.add(s);
                Log.e("ADDED ID", userid.toString());
                }
                    else{
                        checkBoxState[position]=false;
                        s=(String)v.getTag();
                        userid.remove(s);
                        Log.e("Removed ID", userid.toString());
                    }


                }
            });
            holder.chek.setChecked(checkBoxState[position]);
            CheckBox result = (CheckBox)convertView;
            if (result == null) {
                result = new CheckBox(context);
            }}

        else

            holder=(ViewHolder)v.getTag();

        final Custom custom = entries.get(position);
        if (custom != null) {
            holder.item1.setText(custom.getcustomBig());
            holder.item2.setText(custom.getcustomSmall());

        }
        return v;
    }
    public ArrayList<String> getUserid() {
        return userid;
    }
    public void setUserid(ArrayList<String> userid) {
        this.userid = userid;
    }
}

3 个答案:

答案 0 :(得分:0)

将此代码用于基本适配器。

public class CollageView extends BaseAdapter {
    Context context;
    ArrayList<String> image_arrylist = new ArrayList<String>();
    File file;
    Bitmap bm;
    LayoutInflater inflater;
    ImageView imageview;
    ViewHolder holder = null;
    int position;

    public CollageView(Context c, ArrayList<String> array_list) {
        context = c;
        imageview = new ImageView(c);
        image_arrylist = array_list;
        inflater = LayoutInflater.from(context);

        System.out.println("Size-&&7" + image_arrylist.size());
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return image_arrylist.size();
    }

    @Override
    public Object getItem(int arg0) {
        // TODO Auto-generated method stub
        return arg0;
    }

    @Override
    public long getItemId(int arg0) {
        // TODO Auto-generated method stub
        return arg0;
    }

    @Override
    public View getView(final int position, View convertView,
            ViewGroup parent) {

        View v = convertView;
        if (v == null) {
            v = inflater.inflate(R.layout.collage_image_row, null);
            holder = new ViewHolder();
            holder.image = (ImageView) v
                    .findViewById(R.id.imageView_collage);
            holder.checkbox = (CheckBox) v
                    .findViewById(R.id.itemCheckBox_collage_image);
            v.setTag(holder);
        } else {
            holder = (ViewHolder) v.getTag();
        }
        holder.checkbox.setId(position);
        holder.image.setId(position);

        if (CollageViewActivity.checkbox_boolean == true) {
            holder.checkbox.setVisibility(View.VISIBLE);
        }

        System.out.println("aname" + aname);

        holder.checkbox.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {

                System.out.println("click-1");

                // TODO Auto-generated method stub
                CheckBox cb = (CheckBox) v;
                int id = cb.getId();
                if (thumbnailsselection[id]) {
                    cb.setChecked(false);
                    thumbnailsselection[id] = false;
                } else {
                    cb.setChecked(true);
                    thumbnailsselection[id] = true;
                }
            }
        });

        holder.checkbox.setChecked(thumbnailsselection[position]);
        holder.id = position;

        System.out.println("set image..." + image_arrylist.get(position));
        file = new File(image_arrylist.get(position));
        String ext = file.toString();
        if (checkVideo(file)) {
            System.out.println("video exist  " + file.exists());
            holder.image.setScaleType(ImageView.ScaleType.CENTER);
            aq.id(holder.image).image(
                    getVideoThumnail(image_arrylist.get(position)));
        } else {
            System.out.println("file exist  " + file.exists());
            holder.image.setScaleType(ImageView.ScaleType.CENTER);
            aq.id(holder.image).image(file, 300);
        }

        holder.image.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                System.out.println("labelorcollage"
                        + GeneralClass.lableorcollage
                        + image_arrylist.size());

                GeneralClass.checkfullimage = true;
                // gridview.setVisibility(View.GONE);
                playout_image.setVisibility(View.VISIBLE);
                playout_grid.setVisibility(View.GONE);

            }
        });

        return v;
    }

    public class ViewHolder {
        TextView imageTitle;
        ImageView image;
        RelativeLayout layout;
        CheckBox checkbox;
        int id;
    }
}

答案 1 :(得分:0)

//try to replace this peace of code
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
        View v = convertView;
        ViewHolder holder;
        if (v == null) {
            v = vi.inflate(R.layout.checkboxlist, null);
            holder = new ViewHolder();
            holder.item1 = (TextView) v.findViewById(R.id.contactname);
            holder.item2 = (TextView) v.findViewById(R.id.companyname);
            holder.chek=(CheckBox)v.findViewById(R.id.checboxlist);
            v.setTag(holder);
        }else{
                holder=(ViewHolder)v.getTag();
        }
            holder.chek.setChecked(checkBoxState[position]);
            holder.chek.setTag(position);
            holder.chek.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                checkBoxState[(Integer)((CheckBox)compoundButton).getTag()]=b;
                if(b){
                    userid.add(udis[(Integer)((CheckBox)compoundButton).getTag()]);
                }else{
                    userid.remove(udis[(Integer)((CheckBox)compoundButton).getTag()]);
                }
            }
            });


        final Custom custom = entries.get(position);
        if (custom != null) {
            holder.item1.setText(custom.getcustomBig());
            holder.item2.setText(custom.getcustomSmall());

        }
        return v;
}

答案 2 :(得分:-1)

查看此链接:http://sunil-android.blogspot.in/2013/04/android-listview-checkbox-example.html并按照他所采取的步骤为您提供帮助!它也帮我检查了我选择的复选框。