【问题标题】:Checkboxes become unchecked in Dialog when scrolling滚动时复选框在对话框中变为未选中状态
【发布时间】:2018-01-09 03:48:55
【问题描述】:

我正在使用AlertDialog.Builder.setMultiChoiceItems 显示带有文本的复选框。我可以成功显示选中的项目,但是每当我向下或向上滚动时,其中一些会随机变为未选中。下面是我的代码。

我能做些什么来解决这个问题?任何帮助表示赞赏!

    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("Title")
    .setMultiChoiceItems(items, selectedItems,
            new DialogInterface.OnMultiChoiceClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which,
                                    boolean isChecked) {
                    selected[which] = isChecked;
                }
            })
    .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int id) {
            dialog.dismiss();
        }
    })
    .setNegativeButton(R.string.preklici, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int id) {
        }
    });

【问题讨论】:

  • 也许你可以看看这个? stackoverflow.com/questions/10895763/…
  • @Rucha Bhatt 那么我想我需要用 listview 创建一个新的自定义对话框?
  • 这是 AppCompat 库中的一个错误。有些版本有错误,有些没有。例如,23.2.1 仅存在 Android 6 上的错误,但 23.0.1 没有。您可以在此处查看可用库版本的列表:maven.google.com
  • @soran_glekovec 你有没有得到你的问题的答案?我遇到了同样的问题,正在寻找解决方案。
  • @Brian 不,我决定为我的项目使用不同的方法。

标签: android checkbox android-alertdialog multichoiceitems


【解决方案1】:

我认为您正在列表视图项目中实施复选框,因此您可以通过此答案。 https://stackoverflow.com/a/10896140/6869491 希望对你有帮助

【讨论】:

  • 那么我想我需要用 listview 创建一个新的自定义对话框?
  • @soran_glekovec 是的,您应该使用 list View 创建一个对话框,这将是一个很好的方法
【解决方案2】:

您需要在代码中处理复选框的检查状态。创建已选择项目的列表

所以创建ArrayList<Integer> selList=new ArrayList(); 然后在你的setMultiChoiceItems 上执行以下操作 -

.setMultiChoiceItems(items, selectedItems,
                new DialogInterface.OnMultiChoiceClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which,
                                        boolean isChecked) {

                            // If user select a item then add it in selected items
                            selectedItems.add(which);
                            multichoiceDialog.getListView().setItemChecked(which, isChecked);// You can tell the dialog to update its state here. 

                    }
                }

请注意,我只显示了您的代码的 1 部分,因此请仅使用 setMultiChoiceItems 方法中的内容。否则你可能不得不自己照顾牙套:)

【讨论】:

  • 谢谢,但是我可以获取复选框的状态来显示它们,只有当我滚动时才会出现问题,一些复选框被取消选中。
  • 好的 那么你的 selectedItems 列表是什么?您是否在 onclicl 中更新它
  • 什么是选定列表。@soran_glekovec 我认为你正在交换两件事。更新 selectedItems 列表并将其传递给 setMultiChoiceItems 方法或传递所选列表
  • 问题不是 onClick 监听器,而是在滚动时保持复选框的状态,在创建对话框时已经选择了复选框。
  • 是的,我知道。你可以试试上面的代码。当您调用 set 方法时,第二个参数是应检查的项目列表。当您滚动时,它会再次被调用。所以这就是为什么你在点击时更新相同的参数是 selectedItems
猜你喜欢
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 2021-02-26
  • 2012-11-23
  • 2013-10-04
  • 1970-01-01
  • 2021-12-16
  • 1970-01-01
相关资源
最近更新 更多