Java 复选框';listView/适配器中的是;按「;他们自己
更新#2 我有一个listView和一个适配器。listView中的每个项目都有一个复选框。 单击列表视图中的复选框时,下面的复选框5-6项(重复-所有复选框)似乎也被按下-灯亮着,即使当时没有人单击,并且当使用“isChecked”bool标志检查其是否实际按下时,它为false 公共类watchAllAdapter扩展了ArrayAdapter{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
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”解决了此问题:,谢谢!!