0

我有一个复选框,它将使用每行中的复选框选择 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

4

2 回答 2

0

用这个...

if(checked==true)
{   
    checkAll=true;
    adapter.notifyDataSetChanged();
}
else if(checked==false)
{
    clearAll=false;
    adapter.notifyDataSetChanged();
}

谢谢你

于 2013-10-01T12:08:43.790 回答
0

在任何时候都不会将变量 clearAll 或 checkAll 重置为 false,因此在您单击该框两次后,getView 的两个 if 语句将始终被输入。

于 2013-09-24T13:13:30.860 回答