Java 复选框';listView/适配器中的是;按「;他们自己

Java 复选框';listView/适配器中的是;按「;他们自己,java,android,listview,checkbox,adapter,Java,Android,Listview,Checkbox,Adapter,更新#2 我有一个listView和一个适配器。listView中的每个项目都有一个复选框。 单击列表视图中的复选框时,下面的复选框5-6项(重复-所有复选框)似乎也被按下-灯亮着,即使当时没有人单击,并且当使用“isChecked”bool标志检查其是否实际按下时,它为false 公共类watchAllAdapter扩展了ArrayAdapter{ public watchAllAdapter(Context context, ArrayList<Subject> arrayLis

更新#2 我有一个listView和一个适配器。listView中的每个项目都有一个复选框。 单击列表视图中的复选框时,下面的复选框5-6项(重复-所有复选框)似乎也被按下-灯亮着,即使当时没有人单击,并且当使用“isChecked”bool标志检查其是否实际按下时,它为false

公共类watchAllAdapter扩展了ArrayAdapter{

public watchAllAdapter(Context context, ArrayList<Subject> arrayList) {
    super(context, 0, arrayList);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View listItemView = convertView;
    if (listItemView == null) {
        listItemView = LayoutInflater.from(getContext()).inflate(
                R.layout.for_each_watch_all, parent, false);
    }
    final Subject currSubject = getItem(position);

    final CheckBox cb = (CheckBox) listItemView.findViewById(R.id.checkbox_for_each);
    cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
            if (isChecked){
                currSubject.setChosen(true);
            }
            else{
                cb.setChecked(false);
                currSubject.setChosen(false);
            }
        }
    });

    return listItemView;
}
public watchAllAdapter(上下文上下文,ArrayList ArrayList){
super(context,0,arrayList);
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
View listItemView=convertView;
如果(listItemView==null){
listItemView=LayoutFlater.from(getContext()).inflate(
R.layout.for_each_watch_all,parent,false);
}
最终主题currSubject=getItem(位置);
最终复选框cb=(复选框)listItemView.findViewById(R.id.CheckBox\u代表每个);
cb.setOnCheckedChangeListener(新建CompoundButton.OnCheckedChangeListener(){
@凌驾
检查更改后的公共无效(复合按钮视图,布尔值已检查){
如果(已检查){
currSubject.setSelected(true);
}
否则{
cb.setChecked(假);
currSubject.setSelected(false);
}
}
});
返回listItemView;
}

谢谢=]

如果我是你,我建议你只使用

if(cb.isChecked()) {
    currSubject.setChosen(true);
}
else if (!cb.isChecked()) {
    currSubject.setChosen(false);
}

尝试遵循视图持有者模式。创建一个持有者类,如果该视图不为null,则重用该视图。如果视图已经存在,则还应将onCheckedChangedListener()的复选框设置为null

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View listItemView = convertView;
    Holder holder = null;
    if (listItemView == null) {
        listItemView = LayoutInflater.from(getContext()).inflate(
                R.layout.for_each_watch_all, parent, false);
        holder = new Holder();

        holder.ckbox =(CheckBox)row.findViewById(R.id.check_box_id);

        listItemView .setTag(holder);
    }else {

        holder = (Holder) listItemView.getTag();
        holder.ckbox.setOnCheckedChangeListener(null);

    }
    final Subject currSubject = getItem(position);

    final CheckBox cb = (CheckBox) listItemView.findViewById(R.id.checkbox_for_each);
    cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
            if (isChecked){
                currSubject.setChosen(true);
            }
            else{
                cb.setChecked(false);
                currSubject.setChosen(false);
            }
        }
    });

    return listItemView;
}

private class ViewHolder {
    CheckBox checkBox;
}

请在下面发布您的代码,以便我们可以检查它。谢谢您的回复,这是新的=]。以及如何处理复选框
选中的
未选中的
案例??在您的sol的第9行中,谁是“行”?我可以通过listItemView…访问R.id…,在这个“如果”中为空,编辑:以及谁是“R.id.check\u box\u id”?将其替换为ListItemViews。如果这样做,则仍然存在相同的问题。使用您的解决方案和“josephus”解决了此问题:,谢谢!!