【发布时间】:2013-09-29 17:09:16
【问题描述】:
我有一个复选框,它将使用每行中的复选框选择 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
【问题讨论】:
-
在其他部分中再次给出 checkAll=true
-
已解决。在选中和取消选中复选框时,我必须根据情况更改这两个参数。
-
我可以发表我的答案吗?
-
是的,请发表你的答案
-
只需在适配器中添加一个参数作为布尔值 Ex.MyAdapter adapter=new Save_Weight_Adapter(this, R.layout.layoutname, array,false); listview.setAdapter(适配器);
标签: android listview checkbox selectall