Android 复选框在自定义列表视图中滚动时未选中,则为';我找不到解决办法

Android 复选框在自定义列表视图中滚动时未选中,则为';我找不到解决办法,android,listview,custom-adapter,Android,Listview,Custom Adapter,我知道这个问题在论坛上有很多答案,但我尝试了所有答案,没有一个与我的代码兼容。每当列表向下滚动时,复选框将被取消选中。这是我的密码: public class ContactsAdapter extends ArrayAdapter<User> { private LayoutInflater inflater; boolean[] checkBoxState; ViewHolder holder; public ContactsAdapter(Context context,

我知道这个问题在论坛上有很多答案,但我尝试了所有答案,没有一个与我的代码兼容。每当列表向下滚动时,复选框将被取消选中。这是我的密码:

public class ContactsAdapter extends ArrayAdapter<User> {

private LayoutInflater inflater;
boolean[] checkBoxState;
ViewHolder holder;

public ContactsAdapter(Context context, ArrayList<User> list) {
    super(context, R.layout.listitemlayout, R.id.itemTextView, list);
    inflater = LayoutInflater.from(context);
    checkBoxState = new boolean [list.size()];
}

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

    if (convertView == null) {
        holder = new ViewHolder();
        convertView = inflater.inflate(R.layout.listitemlayout, null);
        holder.itemTextView = (TextView)convertView.findViewById(R.id.itemTextView);
        holder.checkbox = (CheckBox)convertView.findViewById(R.id.checkbox);
        convertView.setTag(holder);
    } 
    else {
        holder = (ViewHolder) convertView.getTag();  
    }

    User user = getItem(position);
    holder.itemTextView.setText(user.getName());

    holder.checkbox.setTag(user);
    holder.checkbox.setChecked(checkBoxState[position]);
    holder.checkbox.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            if(((CheckBox)v).isChecked())
                checkBoxState[position]=true;
            else
                checkBoxState[position]=false;
        }
    });

    return convertView;
}

private class ViewHolder {
    TextView itemTextView;
    CheckBox checkbox;
}
公共类ContactsAdapter扩展了ArrayAdapter{
私人充气机;
布尔[]checkBoxState;
视窗座;
公共联系人适配器(上下文,数组列表){
super(context,R.layout.listitemlayout,R.id.itemTextView,list);
充气器=充气器。从(上下文);
checkBoxState=new boolean[list.size()];
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
if(convertView==null){
holder=新的ViewHolder();
convertView=充气机。充气(R.layout.listitemlayout,null);
holder.itemTextView=(TextView)convertView.findViewById(R.id.itemTextView);
holder.checkbox=(checkbox)convertView.findViewById(R.id.checkbox);
convertView.setTag(支架);
} 
否则{
holder=(ViewHolder)convertView.getTag();
}
用户=获取项目(位置);
holder.itemTextView.setText(user.getName());
holder.checkbox.setTag(用户);
holder.checkbox.setChecked(checkbox状态[位置]);
holder.checkbox.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
如果(((复选框)v).isChecked())
checkBoxState[位置]=真;
其他的
checkBoxState[位置]=假;
}
});
返回视图;
}
私有类视窗持有者{
TextView项目TextView;
复选框;
}
}


有谁能帮我吗?

您是否厌倦了使用一个而不是
OnClickListener
?然后,您可以将从
isChecked
中获得的任何值分配到
checkBoxState
数组中。

遵循以下步骤:我来看看!非常感谢。Anand,谢谢你的帮助,但是代码不起作用,那么你需要更多关于发生了什么的信息。尝试运行调试器,并在从数组读取值和更改值以反映新的选中状态时放置断点。