我有一个自定义适配器类,如下所示。当我选中一个复选框时,其他复选框也会在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;
}
}
答案 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并按照他所采取的步骤为您提供帮助!它也帮我检查了我选择的复选框。