【问题标题】:Selecting all items in ListView works only once [duplicate]选择 ListView 中的所有项目只能工作一次[重复]
【发布时间】: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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    使用这个...

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

    谢谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-24
      • 1970-01-01
      • 2023-03-20
      相关资源
      最近更新 更多