2016-11-05 55 views
-2

更新#2 我有一个listView和适配器。 listView中的每个项目都有一个复选框。 当点击列表视图中的复选框时,下面的5-6项复选框(重复 - 所有复选框)也被按下 - 指示灯亮起,即使没有人点击,然后在检查它是否真正按下'isChecked'布尔标志,它是错误的。复选框在列表视图/适配器是“按”自己的

公共类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; 
} 

感谢=]

+2

请在下面发布您的代码,以便我们可以检查它 –

+0

是否做到了,谢谢您的回复,新的=]。 –

回答

0

尝试按照查看持有人格局。创建一个Holder类并重用该视图,如果它不为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; 
} 
+0

?我可以访问R.id .... with listItemView ... tho它的null在这个'如果',编辑:谁是“R.id.check_box_id”? –

+0

将其替换为listItemView – Sanjeet

+0

这样做,同样的问题仍然存在。 –

0

如果我是你,我只想用建议...

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

如何复选框'checked'或'unchecked'将被处理?你的sol的第9行中,谁是'row'的 – Sanjeet

相关问题