checkbox select 全部删除问题

checkbox select all delete issue

我在自定义列表视图中有复选框,我有两个单独的按钮,一个到 select 全部,另一个要删除,但如果我 select 一个复选框和 select delete it works.but if i select all and delete it delete few of the data in lists,例如我在列表视图中有50条短信,一旦我select all并删除它删除一些短信,然后我再次按下删除它删除了另外几个这样的..建议一些解决方案

     sel.setOnClickListener(new View.OnClickListener() {
        @Override

     public void onClick(View v) {

     for (int i = 0; i <sms.size() ; i++) {

       if(sms.get(i).getChecked() == false ) {
                    sms.get(i).setChecked(true);
                }else if(sms.get(i).getChecked()==true) {
                    sms.get(i).setChecked(false);
                }


            }
            ((datalist)mlistView.getAdapter()).notifyDataSetChanged();
        }
    });
             del.setOnClickListener(new View.OnClickListener() {
        @Override

      public void onClick(View v) {


            for(int i=0; i<sms.size(); i++){
                if(sms.get(i).getChecked() == true){
                    sms.remove(i);
                }
            }


            ((datalist)mlistView.getAdapter()).notifyDataSetChanged();

        }

我想当您在 for 循环中从 ArrayList 中删除项目时会出现问题。结果它的大小变小了,这会导致不良的副作用。

尝试像这样以相反的顺序迭代您的短信 ArrayList:

for (int i = sms.size()-1; i >= 0; i--) {

       if(sms.get(i).getChecked() == true){
                sms.remove(i);
       }
 }

这样减小 sms ArrayList 的大小不会影响循环。

我认为问题出在循环的上层。在 else if 语句中,您取消选中复选框。试试下面的代码,

sel.setOnClickListener(new View.OnClickListener() {

     @Override
     public void onClick(View v) {

     for (int i = 0; i <sms.size() ; i++) {

       if(sms.get(i).getChecked() == false ) {
                    sms.get(i).setChecked(true);
                }else if(sms.get(i).getChecked()==true) {
                    sms.get(i).setChecked(true);
                }


            }
            ((datalist)mlistView.getAdapter()).notifyDataSetChanged();
        }
    });