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

[すべて選択] を好きなようにオン/オフできるようにしたいのですが、現在は 1 回しか機能しません。

編集:コメントの助けを借りて解決しました。

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

        }

    });

ありがとうございます。

4

2 に答える 2

0

変数 clearAll または checkAll を false にリセットすることは決してないので、ボックスを 2 回クリックした後は、getView の if ステートメントの両方が常に入力されます。

于 2013-09-24T13:13:30.860 に答える