Android复选框选择所有未选择所有子项

时间:2016-12-13 06:30:37

标签: android checkbox scrollview

我正在开发一个Android应用程序,其中有一个带有文本视图的自定义列表视图,并且有复选框。在此列表视图中,将显示移动设备的联系人列表,现在我需要添加一个全选复选框,当选中时,需要选中所有复选框。我为此编写了代码但是当我选择select all的复选框时...当前查看的联系人正在选择并且底部scrollview中的联系人未被选中。我正在提供以下代码,请检查并帮助我进行更改。

     lv = (ListView) findViewById(R.id.contactsView);
        ma = new MyAdapter();
        lv.setAdapter(ma);
        lv.setOnItemClickListener(this);
        lv.setItemsCanFocus(false);
        lv.setTextFilterEnabled(true);
switch(view.getId()) {
      case R.id.chkSelectAll:
          if (checked)
          {
              Toast.makeText(MyList.this, "Checked.", Toast.LENGTH_LONG).show();
              for(int i=0; i<lv.getChildCount();i++)

              {
                  CheckBox cb = (CheckBox)lv.getChildAt(i).findViewById(R.id.selected);
                  cb.setChecked(true);
              }
          }

          else
          {
              Toast.makeText(MyList.this, "Not Checked.this time", Toast.LENGTH_LONG).show();
              for(int i=0; i<lv.getChildCount();i++)
              {
                  CheckBox cb = (CheckBox)lv.getChildAt(i).findViewById(R.id.selected);
                  cb.setChecked(false);
              }
          }
          break;

    }
    }

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

您无法通过“getChildAt(i)”检查复选框,因为ListView仅呈现屏幕上的行。

您需要让适配器完成工作:

在MyAdapter中添加如下内容:

public void selectAll() {
    for (Contact c : this.contacts) {
        c.setSelected(true);
    }
    this.notifyDataSetChanged();
}

我现在不知道你的数据模型是如何构建的,但我希望这会给你正确的方向。