0

I have a check box which will select all items in the ListView using a checkbox in each row.The code for the listener:

    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();
            }

        }

    });

I also used setNotifyOnChange and set it true:

     final CheckAdapter adapter=new CheckAdapter(this,R.layout.layout_row,R.id.movie_name,arr);
    adapter.setNotifyOnChange(true);

This is the code from the Adaptr's getView method concerning the checkbox:

        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);
                }
            }
        });

I would like to be able to turn the Select All on and off as I like but currently it only works once.

EDIT:Solved with the help of the comment.

    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();
            }

        }

    });

Thank you Poovizhirajan.N

vamsiampolu
  • 6,328
  • 19
  • 82
  • 183

2 Answers2

0

At no point do you reset the variables clearAll or checkAll to false, so after you've clicked the box twice both of getView's if statements will always be entered.

NeilS
  • 625
  • 7
  • 13
0

use this...

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

thank you

Tom
  • 26,212
  • 21
  • 100
  • 111
Poovizhirajan N
  • 1,263
  • 1
  • 13
  • 29