您好我正在创建一个带动态复选框的自定义列表视图添加我得到我想要的但当我尝试在第一行中选择一个复选框时,自动第一个按钮在第5,9,13行被选中并且当我选择第二行中的任何按钮时,第6,第8,第12行中的相同按钮被选中我在这里做错了我的适配器类
class listViewEventscustomAdapter extends BaseAdapter {
LayoutInflater mInflater;
ViewHolder holder;
public listViewEventscustomAdapter(Context context) {
mInflater = LayoutInflater.from(context);
}
public int getCount() {
if (arrListViewoption_title != null) {
return arrListViewoption_title.size();
} else {
Toast.makeText(getApplicationContext(), "No item found",
Toast.LENGTH_LONG).show();
return 0;
}
}
public Object getItem(int arg0) {
return arg0;
}
public long getItemId(int arg0) {
return arg0;
}
@SuppressWarnings("unchecked")
public View getView(final int position, View convertView,
ViewGroup parent) {
View v = convertView;
final CheckBox checkitem;
if (v == null) {
LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.customlistviewdata, null);
}
if (v != null) {
holder = new ViewHolder();
holder.txtoptiontitle = (TextView) v
.findViewById(R.id.optiontitle);
holder.txtsubtitle = (TextView) v.findViewById(R.id.subtitle);
checkitem = (CheckBox) v.findViewById(R.id.checkBox1);
holder.btn_radio = (RadioButton) v
.findViewById(R.id.radio0);
holder.txtoptiontitle.setText(arrListViewoption_title
.get(position));
holder.txtsubtitle.setText(arrlistViewsub_title.get(position));
if (value.equals(arrListViewoption_type.get(position)
.toString().trim())) {
checkitem.setVisibility(View.VISIBLE);
holder.btn_radio.setVisibility(View.GONE);
}
else {
holder.btn_radio.setVisibility(View.VISIBLE);
checkitem.setVisibility(View.GONE);
}
checkitem
.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton view,
boolean isChecked) {
// int getPosition = (Integer) view.getTag();
// list.get(getPosition).setSelected(view.isChecked());
if (view.isChecked()) {
checkboxvalue.add(arrlistViewsub_title
.get(position).toString().trim());
} else {
System.out
.println("*************unchecked");
checkboxvalue.remove(arrlistViewsub_title
.get(position).toString().trim());
adapter_list.notifyDataSetChanged();
}
Log.i(this.toString(),
"Item" + checkboxvalue.size());
}
});
holder.btn_radio
.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(
CompoundButton buttonView, boolean isChecked) {
// TODO Auto-generated method stub
if (buttonView.isChecked()) {
// Action Doing here
}
}
});
v.setTag(holder);
}
return v;
}
}
答案 0 :(得分:1)
使用convertview对于性能和快速滚动非常有用,但可能会导致这种问题。
在重新使用之前,您应该从转换视图重置任何设置值。在你的情况下:
boolean wasItemChecked = checkboxvalue.contains(arrlistViewsub_title.get(position).toString().trim());
checkItem.setChecked(wasItemChecked );
如果checkItem状态已更改,则根据数据源状态将其重置为true状态。
希望有所帮助。