我有一个复选框,它将使用每行中的复选框选择 ListView 中的所有项目。侦听器的代码:
check_all.setOnCheckedChangeListener(new OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton view, boolean checked) {
// TODO Auto-generated method stub
if(checked==true)
{
checkAll=true;
adapter.notifyDataSetChanged();
}
else if(checked==false)
{
clearAll=true;
adapter.notifyDataSetChanged();
}
}
});
我还使用了 setNotifyOnChange 并将其设置为 true:
final CheckAdapter adapter=new CheckAdapter(this,R.layout.layout_row,R.id.movie_name,arr);
adapter.setNotifyOnChange(true);
这是 Adaptr 的 getView 方法中有关复选框的代码:
if(checkAll)
{
watched.list.clear();
holder.cb.setChecked(true);
}
if(clearAll)
holder.cb.setChecked(false);
holder.cb.setOnCheckedChangeListener(new OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton button, boolean checked) {
button.setChecked(checked);
RelativeLayout parent=(RelativeLayout)button.getParent();
TextView textView=(TextView)parent.findViewById(R.id.movie_name);
String name=textView.getText().toString();
Log.d("CheckListActivity", "Movie "+name+" has been checked to "+checked);
MovieCheck checkFlick=new MovieCheck(name,checked);
if(checked)
{
watched.addToList(checkFlick);
}
else
{
watched.removeFromList(checkFlick);
}
}
});
我希望能够随心所欲地打开和关闭全选,但目前它只能工作一次。
编辑:在评论的帮助下解决。
check_all.setOnCheckedChangeListener(new OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton view, boolean checked) {
// TODO Auto-generated method stub
if(checked==true)
{
checkAll=true;
clearAll=false;
adapter.notifyDataSetChanged();
}
else if(checked==false)
{
checkAll=false;
clearAll=true;
adapter.notifyDataSetChanged();
}
}
});
谢谢 Poovizhirajan.N