【问题标题】:Set checkboxes status in Multichoice AlertDialog in Android在 Android 的 Multichoice AlertDialog 中设置复选框状态
【发布时间】:2015-07-14 08:36:47
【问题描述】:

以下是我的AlertDialog.Builder代码

    final String[] values = new String[] {"Select All", "Android", "ios", "windows", "Blackberry"};
    final ArrayList<String> selecteditems = new ArrayList<String>();
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("Select your favorite OS");
      builder.setMultiChoiceItems(values, null , new DialogInterface.OnMultiChoiceClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which, boolean isChecked) {

            if (isChecked) {
                selecteditems.add(String.valueOf(which));

            } else {

                selecteditems.remove(Integer.valueOf(which));
            }
        }
    })
    .setPositiveButton("OK", new DialogInterface.OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {
            dialog.dismiss();

        }
    })
    .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {
           dialog.dismiss();

        }
    });

    AlertDialog dialog = builder.create();
    dialog.show();

我想要做的是能够检测到何时选中了“全选”,我可以从isChecked 循环中检测到。但我希望能够在用户选中“全选”时将所有选项设置为选中,并在用户取消选中“全选”时删除选中。

【问题讨论】:

    标签: android checkbox android-alertdialog


    【解决方案1】:

    它应该类似于以下代码。关键是提供checkedItemsboolean[] 数组,并在稍后尝试全选时更新它。

    • checkedItems 数组应该更新(因为对话框仍然有它的引用。)
    • 并且应该为每个项目调用dialog.getListView().setItemChecked(i, true);

      items.add(0, "Select All");
      
      boolean[] checkedItems = new boolean[items.size()];
      
      AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
      builder.setTitle(dialogTitle)
              .setMultiChoiceItems(items.toArray(new String[items.size()]), checkedItems, new DialogInterface.OnMultiChoiceClickListener() {
      
                  @Override
                  public void onClick(DialogInterface dialog, int which, boolean isChecked) {
      
                      if(which == 0) {
                          if(isChecked) {
                              multichoiceDialog.getListView().setItemChecked(0, true);
                              checkedItems[0] = true;
                              for(int i=1; i< checkedItems.length; i++) {
                                  checkedItems[i] = true;
                                  multichoiceDialog.getListView().setItemChecked(i, true);
                              }
      
                          }
                      }
                  }
              })
              .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
      
                  @Override
                  public void onClick(DialogInterface dialog, int which) {
      
                  }
              });
      
      multichoiceDialog = builder.create();
      multichoiceDialog.show();
      

    【讨论】:

    • 什么是 multichoiceDialog 是 AlertDialog.Builder 吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多