Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 滚动时,对话框中的复选框变为未选中状态_Android_Checkbox_Android Alertdialog_Multichoiceitems - Fatal编程技术网

Android 滚动时,对话框中的复选框变为未选中状态

Android 滚动时,对话框中的复选框变为未选中状态,android,checkbox,android-alertdialog,multichoiceitems,Android,Checkbox,Android Alertdialog,Multichoiceitems,我正在使用AlertDialog.Builder.setMultiChoiceItems显示带有文本的复选框。我可以成功地显示选中的项目,但每当我向下或向上滚动它时,其中一些项目就会被随机取消选中。下面是我的代码 我能做些什么来解决这个问题?感谢您的帮助 AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("Title") .setMultiChoiceItems(it

我正在使用
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) {
        }
    });

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

因此创建
ArrayList selList=new ArrayList()然后在
设置多选项项上执行以下操作-

.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. 

                    }
                }

请注意,我只显示了代码的一部分,因此只能使用
setMultiChoiceItems
方法中的内容。否则,您可能需要自己处理大括号:)

我认为您正在列表视图项中实现复选框,以便您可以查看此答案。
希望能有所帮助

也许你能看看这个@Rucha Bhatt那么我想我需要用listview创建一个新的自定义对话框?这是AppCompat库中的一个bug。有些版本有缺陷,有些没有。例如,23.2.1只在Android 6上有缺陷,但23.0.1没有。你可以在这里看到可用库版本的列表:@soran_glekovec你有没有得到你问题的答案?我遇到了同样的问题,正在寻找解决方案。@布赖恩:不,我已决定对我的项目使用不同的方法。谢谢,但我可以获取复选框的状态来显示它们,问题只在我滚动时出现,一些复选框被取消选中。好的,那么您的selectedItems列表是什么?你是否在你的OnCliland what is selected list中更新它。@soran_glekovec我想你在交换两件事。更新selectedItems列表并将其传递给setMultiChoiceItems方法,或者传递selected列表问题不在于onClick侦听器,而是在滚动时保留对话框创建时已选中的复选框状态。是的,我知道。你能试试上面的代码吗。调用set方法时,第二个参数是应该检查的项目列表。当你滚动时,它会再次被调用。因此,这就是为什么您在单击时更新相同的参数,即selectedItemsSo,那么我想我需要使用listview创建一个新的自定义对话框?@soran_glekovec是的,您应该使用list View创建一个对话框,这将是一个很好的方法