Ich implementiere das Kontrollkästchen mit der ListView für jedes Element der ListView. Das Problem, das ich habe, ist, dass wenn ich auf ein einzelnes Kontrollkästchen klicke und dann scrolle, einige andere Kontrollkästchen, die nicht angeklickt wurden, zufällig angeklickt werden. Ich habe viele Links auf SO durchgelesen, aber sie haben mein Problem nicht gelöst.
public class CustomListViewAdapter extends ArrayAdapter {
ViewHolder holder = null;
private LayoutInflater inflator = null;
private ArrayList orderList = null;
ArrayList allViews;
public CustomListViewAdapter(Context context, int resource,
List objects) {
super(context, resource, objects);
orderList = (ArrayList) objects;
inflator = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
allViews = new ArrayList();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null) {
convertView = inflator.inflate(R.layout.listview_add_order, null);
holder = new ViewHolder();
convertView.setTag(holder);
holder.txtViewName = (TextView) convertView.findViewById(R.id.txtViewAddOrder);
holder.spinnerAddorder = (Spinner) convertView.findViewById(R.id.spinnerAddOrder);
holder.checkAddorder = (CheckBox) convertView.findViewById(R.id.checkAddOrder);
holder.checkAddorder.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
holder.checkAddorder.setTag(holder);
}
allViews.add(position, holder.spinnerAddorder);
holder.checkAddorder.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
CheckBox cchk = (CheckBox)view;
ViewHolder checkPosition = (ViewHolder) view.getTag();
if(cchk.isChecked()) {
checkPosition.spinnerAddorder.setVisibility(View.VISIBLE);
} else {
checkPosition.spinnerAddorder.setVisibility(View.INVISIBLE);
}
}
});
List list = new ArrayList();
list.add("Select Quantity");
list.add("1");
list.add("2");
list.add("3");
ArrayAdapter dataAdapter = new ArrayAdapter(this.getContext(),R.layout.spinner_add_order_style, list);
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_item);
holder.spinnerAddorder.setAdapter(dataAdapter);
if(holder.checkAddorder.isChecked()) {
ViewHolder checkPosition = (ViewHolder) holder.checkAddorder.getTag();
checkPosition.spinnerAddorder.setVisibility(View.VISIBLE);
} else {
ViewHolder checkPosition = (ViewHolder) holder.checkAddorder.getTag();
checkPosition.spinnerAddorder.setVisibility(View.INVISIBLE);
}
Client order = orderList.get(position);
holder.txtViewName.setText(order.getFirstName());
return convertView;
}
private static class ViewHolder {
public TextView txtViewName = null;
public Spinner spinnerAddorder = null;
public CheckBox checkAddorder = null;
}
}
meine XML-Datei ist